如何在JPA和Hibernate中将数据库生成的列值定义为只读字段?

11

在MariaDB 10.2中,可以为Datetime类型的列定义默认值,例如created和lastModified。

我应该如何访问这些只读字段?因为这些值应该只由数据库控制,不应该从代码中进行修改,但是我希望在代码中能够读取这些属性。

2个回答

15

很简单。只需要将insertableupdatable属性设置为false即可。

@Column(
    name = "created_on", 
    insertable = false, 
    updatable = false
)
private Timestamp createdOn;

1
谢谢,这很有帮助。但是当我尝试使用默认的JpaRepository方法:someObjectsRepository.deleteById(someObjectId)删除someobject时,我遇到了一个java.sql.SQLSyntaxErrorException: Unknown column 'someobject0_.somereadonlyfield' in 'field list'错误。自定义删除查询帮了我一个大忙:@Query("delete from someobject where id = :someObjectId", nativeQuery = true) - Yamashiro Rion
不幸的是,这并不能从删除查询中排除该列,因此它不是只读的。 - Daniel Rusev
@DanielRusev 删除是针对行而不是列的。当删除行时,列值也会被删除,无论它们是只读还是可写的。 - Vlad Mihalcea
如果字段是基本的、非实体类型的集合值,比如一个长整型列表,那么你就有行。 - Daniel Rusev
这与答案或我的先前评论完全无关。 - Vlad Mihalcea

9

您可以使用:

@Column(updatable=false, insertable=false)
private YourType field;

@Column 用于指定持久化属性或字段的映射列,具体来说是 javax.persistence.Column


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接