java - 表有时不会通过 Hibernate native 查询进行更新

标签 java sql hibernate ejb-3.0

我有一个实体,我们称它为 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 是另一个表的外键,在不同的数据库中,我通过 native 查询设置它,因为相应的表不存在于包含 X_TABLE 的同一数据库。但这不是问题。实体映射和关系都很好,我可以保证。

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

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

最佳答案

一些建议:

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

关于java - 表有时不会通过 Hibernate native 查询进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6360078/

相关文章:

java - 使用 boxlayout,如何让组件填充所有可用的水平宽度?

c# - 如果在 proc 中使用 IF/ELSE,MySQL 存储过程不会将数据返回到 C# 应用程序?

sql - 从表中的列中删除标识

java - hibernate 继承缓存,CacheKey 中使用的实体名称不正确?

java - Ivy 依赖配置映射通配符

java - Spring roo 和用户界面

java - 自定义验证应该放在哪里?

java - 无法在 Springboot/Hibernate 中保存具有 OneToMany 关系的子对象

java - 重写父类(super class)的 equals 方法

sql - 如何计算 ID 的组/字段值的数量?