0

DB の仮想列を指す変数 (x など) を持つエンティティがあるようなシナリオがあります。この変数 x は、データを UI などに投影するためだけに使用しましたが、エンティティ オブジェクトを更新または作成するときにそれを挿入または更新したくありません。

これを達成するために、以下に示すように、挿入可能および更新可能をfalseに導入しました

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

関連するゲッターとセッターも導入しました。

私が導入した注釈では、変数 x が挿入または更新操作の一部に含まれていないことを期待していました

しかし、そうではなく、挿入操作と更新操作で発生していることがわかります。これにより、以下のDBエラーが発生します

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)

Hibernate JPAでSpringベースのアプリケーションで仮想列を使用する方法を教えてください

4

1 に答える 1

0

@Transient アノテーションを試しましたか? 「この注釈は、プロパティまたはフィールドが永続的ではないことを指定します。エンティティクラス、マップされたスーパークラス、または埋め込み可能なクラスのプロパティまたはフィールドに注釈を付けるために使用されます。」

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

于 2016-03-23T06:26:20.233 に答える