1 対 1 の遅延読み込みが休止状態で機能しないという問題に直面しました。私はすでにそれを解決しましたが、まだ何が起こるかを正しく理解していません。
私のコード(人を引っ張ると、ここでは遅延読み込みが機能しません-アドレスもフェッチされます):
@Entity
public class Person{
@Id
@SequenceGenerator(name = "person_sequence", sequenceName = "sq_person")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "person_sequence")
@Column(name = "id")
private long personID;
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, fetch = FetchType.LAZY)
private Adress address;
//.. getters, setters
}
@Entity
public class Address {
@Id
@Column(name="id", unique=true, nullable=false)
@GeneratedValue(generator="gen")
@GenericGenerator(name="gen", strategy="foreign", parameters=@Parameter(name="property", value="person"))
private long personID;
@PrimaryKeyJoinColumn
@OneToOne
private FileInfo person;
}
しかしoptional=false
: OneToOne 関係を追加すると、遅延読み込みが正常に機能します。
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, optional = false, fetch = FetchType.LAZY)
private Adress address;
質問/懇願:optional=false
注釈が遅延読み込みを実現するのにどのように役立つかを説明してください。
PS post1とpost2の投稿を読み、単純な OneToOne が怠惰にならない理由を理解しましたが、それでもoptional=false
魔法を理解することはできません。