0

获得 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?

4

2 回答 2

1

您的代码看起来正确。我看不出任何可以忽略 EAGER 的方式。

你确定你得到这个属性的错误,而不是另一个?

还要确保正确地重新编译和部署代码。您最喜欢部署旧版本。

于 2012-04-23T15:18:21.943 回答
1

制作渴望的对象Serializable

于 2014-01-02T15:29:43.627 回答