0

我有一个场景,比如我有一个带有变量(比如 x)的实体,它指向 DB 中的虚拟列。我使用这个变量 x 只是为了将一些数据投影到 UI 上,并且不希望在更新或创建实体对象时插入或更新它。

为了实现这一点,我引入了可插入和可更新为假,如下所示

  @Column(name = "VIRTUAL_COLUMN_NAME_IN_DB", length = 4000, updatable = false, insertable = false)
  private String x;

我还介绍了相关的 getter 和 setter。

通过我引入的注释,我希望变量 x 不包含在插入或更新操作中

但是,事实并非如此,我看到它出现在插入和更新操作中,这反过来导致我在下面出现数据库错误

org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access: SQLException for SQL [n/a]; SQL state [99999]; error code [54017]; ORA-54017: UPDATE operation disallowed on virtual columns
; nested exception is org.hibernate.exception.GenericJDBCException: ORA-54017: UPDATE operation disallowed on virtual columns
    at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:651)
    at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:105)

请让我知道如何在基于 Spring 的应用程序中使用 Hibernate JPA 中的虚拟列

4

1 回答 1

0

您是否尝试过 @Transient 注释?它应该正是为此:“此注释指定属性或字段不是持久的。它用于注释实体类、映射超类或可嵌入类的属性或字段。”

https://docs.oracle.com/javaee/5/api/javax/persistence/Transient.html

于 2016-03-23T06:26:20.233 回答