Java 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类型的条目如下所示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
@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();
}
}