如果一个字段被注释为insertable=false, updatable=false
,这不是意味着您不能插入值或更改现有值吗?你为什么要这么做呢?
@Entity
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany(mappedBy="person", cascade=CascadeType.ALL)
private List<Address> addresses;
}
@Entity
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne
@JoinColumn(name="ADDRESS_FK")
@Column(insertable=false, updatable=false)
private Person person;
}
发布于 2017-08-02 01:55:13
另一个示例是在"created_on“列上,您希望让数据库处理日期创建
发布于 2021-04-08 14:51:47
除了前面的回答之外,insertable=false, updatable=false
的一个常见用途是保存冗余的数据库查询,从而提高性能。
想象一下,有一个Client类,它有一个父实体。如果您只想检查客户端是否有父级,则只需检查其parent_id
列中是否存在值。不需要要求Hibernate获取父实体,可能还有它的所有其他关联,这会导致额外数量的查询:
public class Client {
@ManyToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
private Parent parent;
@Column(name = "parent_id", insertable = false, updatable = false)
private UUID parentId;
}
通过上面的设置,parentId
字段将简单地获取存储在parent_id
列中的任何值,该列仅由父实体编辑/更新。
发布于 2021-06-25 17:45:34
https://stackoverflow.com/questions/3805584
复制相似问题