フィールドに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;
}
問題の関連エンティティの作成/更新の責任がcurrentエンティティにない場合、これを行います。例えば。 Person
とAddress
があります。 Person
エンティティの責任ではないという理由だけで、Address
エンティティ内のAddress
エンティティとのinsertable=false, updatable=false
関係に@OneToMany
を追加したいPerson
を作成または更新します。それは逆です。
insertable=false, updatable=false
の定義は、エンティティでフィールドを複数回マップする必要がある場合に役立ちます。通常は次のとおりです。
これはIMOであり、意味論的なものではなく、間違いなく技術的なものです。
BalusCとPascal Thivent別の答えに追加したいと思いますinsertable=false, updatable=false
の一般的な使用:
idではなく、何らかの種類のシーケンス番号である列を考えてみましょう。シーケンス番号を計算する責任は、必ずしもアプリケーションに属しているとは限りません。
たとえば、シーケンス番号は1000から始まり、新しいエンティティごとに1つずつ増加します。これはデータベースで簡単に、そして非常に適切に行われます。そのような場合、これらの構成は理にかなっています。
もう1つの例は、データベースが日付の作成を処理できるようにする「created_on」列です。