when i changed it to List from Collection, but it did not solve the problem. I appreiciate it if you could show me a little bit psuedo code for manage collection of One-To-Many mapping.
Rafael Nami <[EMAIL PROTECTED]> wrote:
Rafael Nami <[EMAIL PROTECTED]> wrote:
I'm not an expert in this, but I think if you use another type of
collection, like a Set or a List, this behavior won't occur. I usually
use Sets to many to many and Lists to bidirecional relations.
Hope that it helps
Rafael Mauricio Nami
2005/9/12, Dave <[EMAIL PROTECTED]>:
> I am struggling with Hibernate 1-to-many mapping(collection).
> Could someone tell me how to manage the collection of one-to-many mapping? a
> little code will be very helpful.
>
> I have a very simple one-to-many relationship: an Item has many Picture(s).
>
> ENTITY -- Item
> @...
> public class item {
> private Collection pictures;
> private Integer id;
>
> // getter/setter for id and @Id(...)
>
>
> @OneToMany(cascade = {CascadeType.MERGE}, fetch = FetchType.EAGER,
> mappedBy="item")
> public Collection getPictures() {
> return pictures;
> }
>
> public void setPictures(Collection pictures) {
> this.pictures = pictures;
> }
>
> public void addPicture(Picture p) {
>
> if (pictures == null)
> pictures = new ArrayList();
> pictures.add(p);
>
> }
> }
>
> ENTITY Picture --
> @ ....
> public class Picture {
> private Item item;
> private Integer id;
>
> // constructor
> public Picture(Item item, ....) {
> this.item = item;
> ....
> }
> // getter/setter for id and @Id(...)
>
> @ManyToOne
> @JoinColumn(name="itemId")
> public Item getItem() {
> return item;
> }
>
> public void setItem(Item item) {
> this.item = item;
> }
> }
>
> I create an Item in persisten ce without any pictures. Then use a session
> bean to add pictures to the item.
>
> Session Bean --
>
> @Stateless
> public class ItemManagerBean implements ItemManager {
>
> public void addPictureToItem(Item item, Picture p) {
> item.addPicture(p);
> em.merge(item);
> }
>
> }
>
> The merge() ignores those pictures that are already in persistence.
> Add picture P1: ---> persistence: P1, ( great!)
> Add picture P2 ---> persistence: P1, P1, P2 (P1 duplicated)
> Add picture P3 ---> persistence: P1, P1, P2, P1, P2, P3
>
> Obviously, the merge() ignored what are already in persistence. All pictures
> has Id. EM.merge() should be able to know P1 is already in persistence when
> adding P2.
>
> I f I do not call merge(), nothing will be persisted.
>
> I do this from Web GUI. Transaction is thread-based.(default)
>
> Do I miss anything? or Is this a Hibernate bug ?
>
>
> -----------------
>
> I tried one thing: Create a picture in persistence using another session
> bean. Then use em.refresh(item). First time it works, and I can see the
> picture from item.getPictures().
> Then I create another picture the same way, and call em.refresh(item) again,
> but this time item.getPictures() does not have the second picture.
> Not that I have changed the Cascade type to REFRESH.
>
> Basically what is the way to manage the collection in one-to-many mapping?
>
> I am using JBoss 4.0.3RC1 on XP.
>
> Please help! Thank you.
>
> Dave
>
>
>
> __________________________________________________
> Do You Yahoo!?
> Tired of spam? Yahoo! Mail has the best spam protection around
> http://mail.yahoo.co m
--
Java - Assim no Server como no Palm
Java - thus in the Server as it is in Palm
Yahoo! for Good
Click here to donate to the Hurricane Katrina relief effort.