persistence@glassfish.java.net

Many-To-Many on JavaSE Collection returning null

From: David Harrigan <dharrigan_at_gmail.com>
Date: Wed, 4 Apr 2007 12:49:22 +0100

Hi,

Java 6 (update 1).
Glassfish v2 build = tracking cvs.

Background:

One class, doing a self-referential many-to-many (code has been cropped):

@Entity
public Class Item {

    @Id
    private int itemId;

    @ManyToMany(cascade = {PERSIST, MERGE, REFRESH})
    @JoinTable("ITEMRELATEDITEM")
    private Set<Item> relatedItems;

    @ManyToMany(mappedBy = "relatedItem")
    private Set<Item> items;

}

If I then do:

Item parent = new Item();
Item child = new Item();
Item child2 = new Item();

children.add(child);
children.add(child2);

parent.setRelatedItems(children);

em.getTransaction().begin();
em.persist(item);
em.getTransaction().commit();

All 3 entities get inserted into the database (assume ids, parent = 1,
child = 2 and child = 3)

In the ITEMRELATEDITEM table, these rows exist:

RELATEDITEMS_ITEMID ITEMS_ITEMID
2 1
3 1

Okay, subsequentially, if I now do the following:

parent = null;
child = null;
child2 = null;

parent = em.find(Item.class, 1);

I get back the Parent Item object, but, if I then do:

parent.getRelatedItems()

this returns an empty set - always.

Even if I put FetchType.EAGER on the two annotated fields.

If I try this within a container (GF, current cvs), it works, in that
getRelatedItems returns back a set with 2 items in it.

Is there a problem with this in JavaSE?


-=david=-


-- 
PGP Key Id: E2BE72FC
Public Key: http://www.harrigan.info/public.asc