【发布时间】:2013-09-24 05:55:58
【问题描述】:
我正在开发一个 JPA 应用程序,并且我正在使用 eclipse 链接提供程序。
我有一个表 T1,它的字段 F1 定义为非 null 并具有默认值 ('U')。
我已经定义了一个映射到表 T1 的实体。实体有一个属性映射到字段 F1,我已经用注解 @ReturnInsert(returnOnly = true) 配置了该属性。
文档说:
使用@ReturnInsert 使INSERT 操作将值返回到正在写入的对象中
如果我在映射到 F1 的属性中保留一个没有值的实体,则一切正常。实体在插入后自动填充默认值,并在数据库中插入一条记录。
但是如果我尝试使用不同的值(无默认值)持久化一个实体,则会将一条记录插入到数据库中,但字段 F1 的值是默认值,当它应该是我在实体中设置的值时.
为什么会这样?我只想更改默认值。
谢谢
【问题讨论】:
-
如果您通过 JDBC 或数据库工具向数据库发出插入并包含该字段的值,会发生什么情况?尝试打开 EclipseLink 日志记录以查看它为插入发出的语句,并将该 SQL 直接发出到您的数据库。
-
如果我通过包含字段值的数据库工具插入数据库,则插入是正确的。如果我打开 EclipseLink 日志记录,我可以看到插入根本不正确,因为不包括使用 @ReturnInsert 注释的字段。插入类似于:“INSERT INTO t1 (F2, F3) VALUES ('value1', 'value2') RETURNING F1 INTO ?. 因为 F1 不包括在内,所以不会覆盖默认值。
标签: jpa insert eclipselink