Java HQL查询未执行

Java HQL查询未执行,java,hibernate,hql,Java,Hibernate,Hql,我有两个表资产和资产分布类型。资产是父表,资产分布类型是子表。Asset_Dist_Types有两列Asset_id和lkp_Dist_type,其中Asset_id是Asset表中的主键。在Asset_Dist_类型中是多对多(一个Asset_id可以有多个lkp_Dist_类型条目)。在java中,我们只为Asset表提供实体类。对于Asset_Dist_类型,他们将其称为元素集合。在Asset.java中,Asset\u Dist\u类型的条目如下所示 @CollectionOfEleme

我有两个表资产和资产分布类型。资产是父表,资产分布类型是子表。Asset_Dist_Types有两列Asset_id和lkp_Dist_type,其中Asset_id是Asset表中的主键。在Asset_Dist_类型中是多对多(一个Asset_id可以有多个lkp_Dist_类型条目)。在java中,我们只为Asset表提供实体类。对于Asset_Dist_类型,他们将其称为元素集合。在Asset.java中,Asset\u Dist\u类型的条目如下所示

@CollectionOfElements
    @JoinTable(name = "ASSET_DIST_TYPE", joinColumns = @JoinColumn(name="ASSET_ID"))
    @Column(name="LKP_DIST_TYPE")
    private Set<Integer> distTypes = new LinkedHashSet<Integer>(0);
但这是投掷

javax.persistence.PersistenceException: 
org.hibernate.exception.GenericJDBCException: could not execute update query. 

因为我刚开始冬眠,所以我没有得到什么解决方案。有人能帮我吗?

用另一种方法解决了这个问题。。我得到了资产id列表和分发类型列表。我迭代了资产id列表,并为每个资产id添加了分布类型列表并刷新它。它现在正在工作

获取资产id列表后

    for(int i=0;i<assetIdListToUpdateLOB.size();i++){

                int assetId = assetIdListToUpdateLOB.get(i);
                System.out.println(assetId);
                List<Asset> assetDetailsList =  entityManager
                .createQuery(
                        "select distinct asset from Asset asset "
                                + "left join fetch asset.distTypes dt "
                                + "where asset.assetId = :assetIdParam")
                .setParameter("assetIdParam", assetId).getResultList();
                if(assetDetailsList.size()>0){
                this.asset = assetDetailsList.get(0);
                asset.getDistTypes().clear();
                asset.getDistTypes().addAll(selectedDistributionTypes);
                entityManager.flush();
}
}
for(int i=0;i0){
this.asset=assetDetailsList.get(0);
asset.getDistTypes().clear();
asset.getDistTypes().addAll(selectedDistributionTypes);
entityManager.flush();
}
}

有人能帮忙吗。。!!!?在Hibernate配置(
Hibernate.cfg.xml
)中,您可以添加
true
,然后将所有生成的SQL语句记录到控制台。这可能已经对您有所帮助,您可以将该语句复制到SQL终端并在那里执行,以查看它产生的错误。如果你仍然有问题,请。在终端中执行时,发布声明和错误。感谢Johanna的回复。。!我用另一种方式完成了这件事。
    for(int i=0;i<assetIdListToUpdateLOB.size();i++){

                int assetId = assetIdListToUpdateLOB.get(i);
                System.out.println(assetId);
                List<Asset> assetDetailsList =  entityManager
                .createQuery(
                        "select distinct asset from Asset asset "
                                + "left join fetch asset.distTypes dt "
                                + "where asset.assetId = :assetIdParam")
                .setParameter("assetIdParam", assetId).getResultList();
                if(assetDetailsList.size()>0){
                this.asset = assetDetailsList.get(0);
                asset.getDistTypes().clear();
                asset.getDistTypes().addAll(selectedDistributionTypes);
                entityManager.flush();
}
}