У меня плохое понимание ленивой выборки, так как я не работаю, поскольку я читаю об этом в книге, говорят, что в ленивом наборе jpa загрузит объекты только тогда, когда они будут доступны через geters, поэтому я создал проект Arquillian для тестирования этой концепции, но это не сработает. вот мои две сущностиПочему Lazy Fetch не работает JPA
Person
package com.actionbazaar.model;
@Entity
@TableGenerator(
initialValue = 5,
name = "PERSON_SEQ",
table = "PERSON_SEQ_TABLE",
pkColumnName = "SEQ_NAME",
pkColumnValue = "PERSON",
valueColumnName = "SEQ_VALUE")
public class Person implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String fname;
private String lname;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "owner", cascade = CascadeType.PERSIST)
List<Address> addresses;
//getters and setters
}
Адрес
@Entity
public class Address implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String city;
private String zip;
private String street;
@ManyToOne
private Person owner;
//getters and setters
}
У меня есть сессионный компонент с помощью этого метода
public Person getFirstPerson() {
Person p = em.find(Person.class, 1);
em.detach(p);
//why this call does not create an exception
p.getAddresses().get(0);
return p;
}
, так как я отсоединил объект до доступа к адресу, список адресов должен быть пустым, и когда я отключу его, чтобы он больше не управлялся сущ., Поэтому я не должен получать адреса для лица , проблема в том, что я могу получить адреса этого человека, даже у меня есть ленивый выбор для поля адресов и отсоединение объекта до доступа в поле адресов !!!! пожалуйста некоторые есть информация.
Другое испытание
Person p= myStatlessSessionBean.getFirstPerson();
myOtherStalessSesionBean.moveAllPeopleToCity("NY");
if(p.getAddresses().get(0).getCity().equals("NY"))
{
system.out.prinln("person moved");
}
else {
system.out.prinln("person did not move");
} //prompts person did not move
yup .. Вы правы. Мне было любопытно узнать, почему это произошло. Дополнительная информация получена. Спасибо @achabahe –
@achabahe Я подозревал, что это была причина, но вы отметили свой вопрос «спящим», хотя, похоже, вы его не используете. Это вводит в заблуждение. –
Возможно, он пытался добраться до спящего, зная людей: D? @JBNizet^_^ –