更新操作时toplink前缀表与TL_

时间:2011-01-10 14:51:37

标签: jpa toplink

我在JPA(toplink)上有非常简单的命名查询:

UPDATE Server s SET s.isECM = 0

我没有携带已经预加载的实体的缓存或有效性。但是数据库连接是从受限帐户执行的(仅限INSERT / UPDATE / DELETE)。看来这个查询的toplink执行(并且因为TL_Server不存在而失败)非常奇怪的SQL:

INSERT INTO TL_Server (elementId, IsECM) 
    SELECT t0.ElementId, ? 
    FROM Element t0, Server t1 
    WHERE ((t1.elementId = t0.ElementId) AND (t0.elementType = ?))

bind => [0, Server]
这是什么?如何将简单的UPDATE显示为INSERT?为什么toplink查询TL _?

1 个答案:

答案 0 :(得分:2)

TL_Server是临时表。由于确定UpdateAll查询很复杂,因此必须使用临时表。我认为它确定是复杂的,因为该类有多个表,所以它们必须连接,这不能在简单的更新中完成。

如果你上课只有一个表,那么只需要进行简单的更新。

如果失败,则数据库平台的临时表支持存在问题。确保正确设置“toplink.target-database”。你在用什么数据库?

您似乎使用的是旧版本的TopLink Essentials? UpdateAll支持在最新的EclipseLink版本中得到了很大改进,您可以考虑升级。

如果使用TopLink Essentials无法使用它,您可以始终只使用本机SQL查询而不是JPQL。