我想创建一个不应进行任何类型的插入或更新的实体,我可以想到两种方法来做到这一点:
在每列上使用 insertable=false 和 updatable=false 标记
@Entity
@Table(name = users)
class Users {
@Column(name= 'name' insertable=false, updatable=false)
String name;
}
我不喜欢这个,尽管它有效,因为我必须将这些标签放在所有列中,并且我想在类级别进行,为此我可以考虑使用 hibernate 的 @Inmutable 注释
@Entity
@Inmutable
@Table(name = users)
class Users {
@Column(name= 'name')
String name;
}
这个标签允许我在实体上做一个获取,但以后不能修改那些值。
不可变标签是否覆盖休眠持久性或者可以以某种方式保存?是否有任何其他标签可以在实体的类级别使用,允许我修改实体的对象但不能在数据库中插入或更新?
实际上,不可变标签不允许您将实体持久保存在数据库中。
您可以修改实体的对象而无需将它们插入数据库,它仅在执行持久方法时才插入数据库。因此,您对对象所做的所有修改都会反映在内存中,如果您不想存储修改,只需不要持久化对象即可。
另一种选择是映射视图而不是表
假设我们有我们的用户表,所以我们创建视图作为原始表的查询
在我们的映射中,我们引用视图
当 hibernate 创建查询时,它将简单地使用有效的视图名称进行查询。但是当有人想要持久化或更新这样的实体时,他们会得到一个丑陋的异常并且无法做到。
您可以将以下行添加到存储库代码中: