【问题标题】:Table will not UPDATE sometimes through a Hibernate native query表有时不会通过 Hibernate 本机查询更新
【发布时间】:2011-06-15 15:17:56
【问题描述】:

我有一个实体,我们称它为 X。(该实体有一个 @Id id)。 实体映射到一个表,我们称之为:X_TABLE。 它还包含一个

@ManyToOne
@JoinColumn(name = "JOIN_COLUMN")
YClass joinColumn;//another entity

我正在使用以下代码:

X x = new X(xDTO);//just a copy constructor, nothing fancy, without id
x.joinColumn = null;
entityManager.persit(x);
entityManager.flush();
join_column_id = somne_function();//irelevant
Query q = entityManager.createNativeQuery(
        "UPDATE  X_TABLE t SET t.JOIN_COLUMN=" + join_column_id + " WHERE " + " t.id= "    + x.getId());
q.executeUpdate();
q.flush();

这样做的重点是,如果有人想知道,join_column 是另一个表的外键,在不同的数据库中,我通过本机查询设置它,因为对应的表不存在于包含 X_TABLE 的同一数据库。但这不是问题。实体映射和关系都很好,我可以保证。

上面的代码是在一个循环中对多条记录执行的,有时它对所有记录都可以正常工作(保存和更新表格)。但有时它适用于所有记录,除了循环中的最后一条记录(从某种意义上说,它保存了记录, 但不执行数据库中的更新)。 没有抛出异常,休眠的 JBoss 服务器调试日志显示 UPDATE 以正确的值发生,没有错误。然而,该表在 JOIN_COLUMN 中仅包含一条记录的空值,我不知道为什么。有什么想法吗?

PS:该服务是一个容器管理事务。

【问题讨论】:

    标签: java sql hibernate ejb-3.0


    【解决方案1】:

    一些建议:

    • 检查受executeUpdate()影响的行数
    • 您的交易政策是什么?是否定义了任何 TransactionManager?

    【讨论】:

      猜你喜欢
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多