Ich hatte das Problem, dass eins zu eins verzögertes Laden im Ruhezustand nicht funktioniert. Ich habe es bereits gelöst , verstehe aber immer noch nicht richtig , was passiert.
Mein Code ( verzögertes Laden funktioniert hier nicht , wenn ich Person - Adresse abrufe, wird auch abgerufen):
@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;
}
Aber : Wenn ich hinzufügen , optional=false
in OneToOne Beziehung, verzögertes Laden funktioniert gut !
@OneToOne(mappedBy="person", cascade=CascadeType.ALL, optional = false, fetch = FetchType.LAZY)
private Adress address;
Frage / Bitte: Erklären Sie mir bitte, wie optional=false
Anmerkungen dazu beitragen , ein verzögertes Laden zu erreichen.
PS Ich habe die Beiträge post1 und post2 gelesen und verstehe, warum OneToOne nicht faul sein kann, aber ich kann optional=false
Magie immer noch nicht verstehen .
same table
also benutze ich die @ OneToOne-Beziehung. Ich habe zwar LAZY fetchType verwendet, aber es scheint nicht zu funktionieren. Wenn ich sageoptional=false
, funktioniert es. Jede Erklärung wird sehr geschätzt.