我有2个表Asset和Asset_Dist_Types。资产是父级,Asset_Dist_Types是子级表。 Asset_Dist_Types有2列asset_id和lkp_dist_type,其中asset_id是Asset表中的主键。在Asset_Dist_Types中,它是多对多的(一个asset_id可以有多个lkp_dist_type条目。)在java中,我们只有Asset表的实体类。在Asset_Dist_Type中,他们已将其作为元素集合提及。在Asset.java中,Asset_Dist_Type的条目如下。
@CollectionOfElements
@JoinTable(name = "ASSET_DIST_TYPE", joinColumns = @JoinColumn(name="ASSET_ID"))
@Column(name="LKP_DIST_TYPE")
private Set<Integer> distTypes = new LinkedHashSet<Integer>(0);
现在我想更新Asset_Dist_Type表的lkp_dist_type列。我有资产ID列表。我写了以下查询来更新它。
int hql = entityManager.createQuery(
"update Asset a set a.distTypes = :distTypeParamId where a.assetId in (:assetIdParam)")
.setParameter("distTypeParamId", distTypeList)
.setParameter("assetIdParam", assetIdListToUpdateLOB)
.executeUpdate();
但是这就是投掷
javax.persistence.PersistenceException:
org.hibernate.exception.GenericJDBCException: could not execute update query.
由于我是hibernate的新手,我没有得到什么是解决方案。有人可以帮助我吗?
答案 0 :(得分:0)
通过以不同的方式解决它..我得到了资产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();
}
}