请解释一下:insertable = false,updatable = false
如果一个字段被注释为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; }
当创build/更新相关实体的责任不在当前实体中时,您将这样做。 例如你有一个人和一个Address
。 您希望将@OneToMany
实体中的Person
实体的@OneToMany
关系的insertable=false, updatable=false
@OneToMany
insertable=false, updatable=false
到Address
实体中,因为它不是Address
实体创build或更新Person
的责任。 这是相反的。
当你需要在一个实体中多次映射一个字段时insertable=false, updatable=false
定义insertable=false, updatable=false
是很有用的,通常:
- 当使用复合键时
- 当使用共享的主键
- 当使用级联主键时
这不是一个语义的东西,但绝对是一个技术。
我想补充一下BalusC和Pascal Thivent的答案insertable=false, updatable=false
updatable insertable=false, updatable=false
另一种常见用法:
考虑一个不是一个id,但某种序列号的列 。 计算序列号的责任可能不一定属于应用程序。
例如,序列号以1000开始,每增加一个新的实体应该加1。 在数据库中这很容易完成,非常合适,在这种情况下,这些configuration是有意义的。
另一个例子是你想让数据库处理date创build的“created_on”列