Java 如何在JPA和Hibernate中将数据库生成的列值定义为只读字段?
使用MariaDB 10.2,可以定义Datetime的默认值,例如created和lastModifiedJava 如何在JPA和Hibernate中将数据库生成的列值定义为只读字段?,java,hibernate,jpa,mariadb,readonly,Java,Hibernate,Jpa,Mariadb,Readonly,使用MariaDB 10.2,可以定义Datetime的默认值,例如created和lastModified 如何作为只读字段访问此列?因为这个值应该只在数据库的控制下,不应该从代码中修改,但是我想在代码中读取这个属性 很简单。只需将insertable和updateable属性设置为false @Column( name = "created_on", insertable = false, updatable = false ) private Timestamp
如何作为只读字段访问此列?因为这个值应该只在数据库的控制下,不应该从代码中修改,但是我想在代码中读取这个属性 很简单。只需将
insertable
和updateable
属性设置为false
@Column(
name = "created_on",
insertable = false,
updatable = false
)
private Timestamp createdOn;
您可以使用:
@Column(updatable=false, insertable=false)
private YourType field;
其中,
@列
用于指定持久属性或字段的映射列。特别是javax.persistence.Column
谢谢,它很有帮助。但是,当我尝试在默认情况下删除someobject
时,我在“字段列表”中有一个java.sql.SQLSyntaxErrorException:未知列“someobject0.somereadonlyfield”(someObjectId)(someObjectId)
方法:someObjectsRepository.deleteById(someObjectId)
。自定义删除查询帮助了我:@query(“从someobject中删除,其中id=:someObjectId,nativeQuery=true)
不幸的是,这不会将列从删除查询中排除,因此它不是只读的。@DanielRusev delete用于行,而不是列。行被删除时,列值将消失,无论它们是只读的还是可写的;这与答案或我之前的评论完全无关