2013-04-05 48 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