获得 GlassFish v3。我有一个一对多的实体。问题是,这EclipseLink
似乎忽略了 fetch EAGER 模式。
这是我的实体。
@Entity
public class Person implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@OneToMany(mappedBy = "person", fetch = FetchType.EAGER)
private List<Hobby> hobbies;
// getter and setter
}
一段1:n
关系
@Entity
public class Hobby
{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@ManyToOne
@JoinColumn
private Person person;
// getter and setter
}
还有豆
@javax.ejb.Remote
public interface Testing
{
public void addTestData();
public List<Person> getTestData();
}
@javax.ejb.Stateless
public class TestingBean implements Testing
{
@javax.persistence.PersistenceContext
private EntityManager entityManager;
public void addTestData()
{
Person p = new Person();
p.setName("JOE");
entityManager.persist(p);
Hobby h1 = new Hobby();
h1.setName("h1");
h1.setPerson(p);
entityManager.persist(h1);
}
public List<Person> getTestData()
{
TypedQuery<Person> gridQuery = entityManager.createQuery("SELECT e FROM Person e", Person.class);
return gridQuery.getResultList();
}
}
编辑客户:
InitialContext context = new InitialContext();
Testing test = (Testing)context.lookup("java:global/dst2_1/TestingBean");
test.addTestData();
for(Person p: test.getTestData()) {
System.out.println(p.getName());
for(Hobby b : p.getHobbys()) {
System.out.println(b.getName());
}
}
context.close();
使用MySQL
- 存储数据有效。但是,如果我获取数据,则只返回该人-而不是爱好。你能告诉我我的代码有什么问题吗?
编辑对不起已经尝试了很多东西......如上所示的代码产生:
异常描述:尝试使用具有空会话的间接遍历关系。这通常发生在具有未实例化 LAZY 关系的实体被序列化并且在序列化之后遍历该惰性关系时。为避免此问题,请在序列化之前实例化 LAZY 关系。
但是 Person 被正确返回。为什么在我使用 EAGER 时它指定 LAZY?