Я столкнулся с проблемой, что индивидуальная ленивая загрузка не работает в спящем режиме. Я уже решил его, но все же не правильно понять, что происходит.
Мой код ( ленивая загрузка здесь не работает, когда я вытаскиваю Person - Address также выбирается):
@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", [email protected](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;
Вопрос /Entreaty:, пожалуйста, объясните мне, как аннотация optional=false
помогает достичь ленивой загрузки.
PS Я читал сообщения post1 и post2, и понять, почему простой OneToOne не может быть ленивым, но я до сих пор не могу понять магию optional=false
.