2013-04-05 92 views
0

我有一個場景,像我在哪裏有一個實體與變量(說x)指向數據庫中的虛擬列。我使用這個變量x只是將一些數據投影到用戶界面上,或者在Iam更新或創建實體對象時不希望插入或更新這些數據。春季與休眠JPA使用虛擬數據庫列不工作

對於這種要實現我已經引入可插入和可更新爲假如下所示

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

我已經介紹相關getter和setter爲好。

隨着我公司推出的註解,我預計變量x將不包括插入或更新opeartions的一部分

但是,它不是這樣的,我看到它即將在插入和更新操作,這inturn害我低於

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) 

一個DB錯誤,請讓我知道如何在基於Spring的應用程序,你是否嘗試過@Transient批註使用虛擬列與Hibernate JPA

+0

設法有與@Generated(GenerationTime.ALWAYS)註釋列。但是,這個 – Shiv 2013-04-05 06:15:28

+0

沒有運氣,我不能重現這一點。我嘗試了H2計算列,但updatable = false和insertable = false計算列在更新和插入中從不提及。 – 2013-04-05 18:06:44

+0

我正在使用Oracle DB。你能讓我知道你正在使用的Hibernate JPA的版本嗎? – Shiv 2013-04-06 00:20:27

回答

1

?它應該完全是這樣的:「該註釋指定屬性或字段不是持久的,它用於註釋實體類,映射超類或可嵌入類的屬性或字段。」

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

+0

如果我使用這個,那麼它甚至不會從數據庫讀取這個值。他們是我們可以閱讀但不寫的任何方式嗎? – 2018-02-08 07:04:56