【问题标题】:HQL Query not executingHQL 查询未执行
【发布时间】:2013-12-12 04:38:02
【问题描述】:

我有 2 个表 Asset 和 Asset_Dist_Types。 Asset 是父表,Asset_Dist_Types 是子表。 Asset_Dist_Types 有 2 列 assets_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 配置 (hibernate.cfg.xml) 中,您可以添加 &lt;property name="show_sql"&gt;true&lt;/property&gt;,然后所有生成的 SQL 语句都会记录到控制台。这可能对您有所帮助,您可以将该语句复制到 SQL 终端并在那里执行以查看它产生的错误。如果您仍然有问题,请。在终端执行时发布语句和错误。
  • 感谢约翰娜的回复..!我为此采取了不同的方式并完成了它。

标签: java hibernate hql


【解决方案1】:

通过采用不同的方式解决了它。我得到了资产 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();
}
}

【讨论】:

    猜你喜欢
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    相关资源
    最近更新 更多