请解释一下: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=falseAddress实体中,因为它不是Address实体创build或更新Person的责任。 这是相反的。

当你需要在一个实体中多次映射一个字段时insertable=false, updatable=false定义insertable=false, updatable=false是很有用的,通常:

  • 当使用复合键时
  • 当使用共享的主键
  • 当使用级联主键时

这不是一个语义的东西,但绝对是一个技术。

我想补充一下BalusCPascal Thivent的答案insertable=false, updatable=false updatable insertable=false, updatable=false另一种常见用法:

考虑一个不是一个id,但某种序列号的列 。 计算序列号的责任可能不一定属于应用程序。

例如,序列号以1000开始,每增加一个新的实体应该加1。 在数据库中这很容易完成,非常合适,在这种情况下,这些configuration是有意义的。

另一个例子是你想让数据库处理date创build的“created_on”列

Interesting Posts