0

GlassFishv3を入手しました。私は1対多のエンティティを持っています。問題は、それ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-データの保存は機能します。しかし、データを取得すると、趣味ではなく、その人だけが返されます。私のコードの何が問題なのか教えてください。

EDIT申し訳ありませんが非常に多くのことを試みました...上記のように示されているコードは生成します:

例外の説明:セッションがnullの間接参照を使用して関係をトラバースしようとしました。これは、インスタンス化されていないLAZY関係を持つエンティティがシリアル化され、その遅延関係がシリアル化後にトラバースされる場合によく発生します。この問題を回避するには、シリアル化の前にLAZY関係をインスタンス化します。

しかし、Personは正しく返されます。EAGERを使用しているのになぜLAZYを指定するのですか?

4

2 に答える 2

1

コードは正しく見えます。EAGERを無視できる方法がわかりません。

別の属性ではなく、この属性でエラーが発生してもよろしいですか?

また、コードを正しく再コンパイルしてデプロイしたことを確認してください。古いバージョンをデプロイするのが最も好きです。

于 2012-04-23T15:18:21.943 に答える
1

熱心なオブジェクトを作成しますSerializable

于 2014-01-02T15:29:43.627 に答える