【发布时间】: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