DB にマップされていないフィールドを追加すると、エンティティ クラスが破損し、問題を解決する間違った方法であるという、哲学的な直感的な感覚があります。
@Transient
しかし、フィールドの使用が暗黙的で難しい問題を解決する具体的な状況はありますか?
たとえば、@Transient
エンティティにフィールドがある場合、第 2 レベルのキャッシュを追加または削除するとアプリが壊れる可能性はありますか?
かなりの更新:フィールドについていくつか考えた後、フィールドは適切な方法で使用する必要がある@Transient
ように思えます。@Transient
「適切な方法」とは、エンティティが常に同じ動作をする必要があることを意味します。null
これは、 @Transient フィールドの値に応じて getter が を時々返すときに、非常にエラーが発生しやすい動作であることを意味します。また、@Transient フィールドは常に初期化する必要があることを意味します。
そして、適切な使用例は2つしかありません。
@Transient フィールドは、オブジェクトのコンストラクターで初期化する必要があります。
@Entity public class SomeEntity @Id private long id; @Transient private String transientField; public SomeEntity () { transientField = "some string"; } ... }
@Transient フィールドは遅延初期化できます。
@Entity public class SomeEntity @Id private long id; @Transient private String transientField; public String getTransientField () { synchronized (lock) { if (transientField == null) { transientField = "some string"; } } return transientField; } ... }
誰かがこれらの 2 つのケースについてコメントしたり、私が見逃した他のケースについて説明したりできますか?