获得GlassFish v3。我有一对多的实体。问题是,EclipseLink
似乎忽略了获取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
- 存储数据有效。但是,如果我只获取数据,则返回该人 - 而不是爱好。 Coudld你告诉我我的代码有什么问题吗?
编辑抱歉已经尝试了很多东西......上面显示的代码产生:
异常描述:试图遍历a 使用具有空会话的间接关系。经常这样 当具有未实例化的LAZY关系的n实体是 序列化和之后的遍历关系 序列化。为了避免这个问题,请确认LAZY 序列化之前的关系。
但是人员正确归还。为什么我在使用EAGER时指定了LAZY?
答案 0 :(得分:1)
您的代码看起来正确。我看不出任何可以忽略EAGER的方式。
您确定收到此属性的错误,而不是另一个错误吗?
还要确保正确地重新编译和部署代码。你最喜欢部署旧版本。
答案 1 :(得分:0)
制作热切的对象Serializable