我有一个POJO,目前我从一个列中获得了一个值。但是,我正在使用Hibernate @Formula(我从另一个表中选择最新记录)来检索它。我想轻声一点,以免破坏任何东西。
所以我想做的是这样的事情:
class SomeDto {
private someField;
@Column("PREVIOUS_FIELD_COLUMN", nullable = false, length = 1)
@Formula("@NEW RETRIEVING LOGIC@")
public getSomeField() {
...
}
这样我就可以在someField
中存储PREVIOUS_FIELD_COLUMN
值,同时根据新条件检索值。
但是现在看来Hibernate忽略了@Column
注释,因为我收到以下错误:
SQLIntegrityConstraintViolationException:ORA-01400:无法插入 NULL进入
我在日志中看到Hibernate在生成的insert语句中跳过PREVIOUS_FIELD_COLUMN
(不列出它并且不从POJO设置值)。
任何帮助表示感谢,非常感谢!
答案 0 :(得分:2)
您可以选择将之前的值重新映射到新字段,以便继续保留旧记录,并将旧值重新映射到@Formula
逻辑。
public class SomeEntity {
@Formula("your new formula logic");
public Object getSomeField() {}
@Column(name= "PREVIOUS_VALUE")
public Object getPreviousValue() {}
}
您的帖子听起来就像您所关注的那样,技术上允许您的应用程序仍然以相同的方式与对象进行交互,但您希望从其他地方获取值;但是,能够保留对旧值的访问和存储。
上述解决方案允许这样做。
答案 1 :(得分:2)
我认为您将使用ColumnTransformer而不是像这样的公式
class SomeDto {
private someField;
@Column("PREVIOUS_FIELD_COLUMN", nullable = false, length = 1)
@ColumnTransformer(read = “@NEW RETRIEVING LOGIC@”)
public getSomeField() {
...
}