HQL查询未执行

时间:2013-12-12 04:38:02

标签: java hibernate hql

我有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的新手,我没有得到什么是解决方案。有人可以帮助我吗?

1 个答案:

答案 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();
}
}