Java 在Hibernate中同时使用@Column和@Formula

Java 在Hibernate中同时使用@Column和@Formula,java,hibernate,jpa,orm,Java,Hibernate,Jpa,Orm,我有一个POJO,现在我从一个列中得到一个值。但是,我正在使用Hibernate@Formula从另一个表中选择最新记录来检索它。我想轻轻地走,以免弄坏任何东西 所以我想做的是这样的: class SomeDto { private someField; @Column("PREVIOUS_FIELD_COLUMN", nullable = false, length = 1) @Formula("@NEW RETRIEVING LOGIC@") public

我有一个POJO,现在我从一个列中得到一个值。但是,我正在使用Hibernate@Formula从另一个表中选择最新记录来检索它。我想轻轻地走,以免弄坏任何东西

所以我想做的是这样的:

class SomeDto {
    private someField;

    @Column("PREVIOUS_FIELD_COLUMN", nullable = false, length = 1)
    @Formula("@NEW RETRIEVING LOGIC@")
    public getSomeField() {
    ...
}
这样我就可以将someField值存储在前一个_FIELD_列中,同时根据新的条件检索该值

但是,现在Hibernate似乎忽略了@Column注释,因为我得到了以下错误:

SQLIntegrityConstraintViolationException:ORA-01400:无法插入 空入

我在日志中看到,Hibernate跳过了正在生成的insert语句中的前一个_FIELD_列,但没有列出它,也没有从POJO设置值


非常感谢您的帮助

您可以选择只将以前的值重新映射到一个新字段,以便它继续为旧记录保留,并将旧值重新映射到@Formula逻辑

从技术上讲,你所关心的只是允许你的应用程序仍然以同样的方式与对象交互,但你希望从其他地方获得价值;然而,能够保留对旧价值的访问和存储


上述解决方案允许这样做。

您可以选择只将以前的值重新映射到一个新字段,以便继续为旧记录保留该值,并将旧值重新映射到@Formula逻辑

从技术上讲,你所关心的只是允许你的应用程序仍然以同样的方式与对象交互,但你希望从其他地方获得价值;然而,能够保留对旧价值的访问和存储


上面的解决方案正好可以做到这一点。

我认为您将使用ColumnTransformer而不是这样的公式

  class SomeDto {
    private someField;


    @Column("PREVIOUS_FIELD_COLUMN", nullable = false, length = 1)
    @ColumnTransformer(read = “@NEW RETRIEVING LOGIC@”)
    public getSomeField() {
    ...
  }

有关更多信息,请参见此

我认为您将使用ColumnTransformer而不是这样的公式

  class SomeDto {
    private someField;


    @Column("PREVIOUS_FIELD_COLUMN", nullable = false, length = 1)
    @ColumnTransformer(read = “@NEW RETRIEVING LOGIC@”)
    public getSomeField() {
    ...
  }

有关更多信息,请参阅此

非常感谢!!!酷,工作,正是我在寻找的:谢谢你很多次!!!酷,有效,正是我想要的:是的,谢谢你的答案,这应该行得通,但是ColumnTransformer的答案用了稍微干净的方式:是的,谢谢你的答案,这应该行得通,但是ColumnTransformer的答案用了稍微干净的方式: