[hibernate-issues] [Hibernate-JIRA] Commented: (HHH-6761) CollectionTable and OneToMany, collection elements duplicate.

Evgeny Terentev (JIRA) noreply at atlassian.com
Mon Oct 24 13:17:22 EDT 2011


    [ http://opensource.atlassian.com/projects/hibernate/browse/HHH-6761?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=44145#comment-44145 ] 

Evgeny Terentev commented on HHH-6761:
--------------------------------------

the same issue with two @OneToMany in one class with annotation FetchType.EAGER
hibernate generate two cross join and collection becomes more

> CollectionTable and OneToMany,  collection elements duplicate.
> --------------------------------------------------------------
>
>                 Key: HHH-6761
>                 URL: http://opensource.atlassian.com/projects/hibernate/browse/HHH-6761
>             Project: Hibernate Core
>          Issue Type: Bug
>          Components: core
>         Environment: 3.6.4.Final
>            Reporter: Evgeny Terentev
>
> @Entity
> @Table(name = "aaa")
> public class AAA implements Serializable {
>     @Id
>     @GeneratedValue(strategy = GenerationType.AUTO)
>     private int id;
>     @MapKey(name = "ccc")
>     @OneToMany(orphanRemoval = true, cascade = {CascadeType.REMOVE}, fetch = FetchType.EAGER, mappedBy = "aaa")
>     private Map<CCC, BBB> bbb = new HashMap<CCC, BBB>();
>     @Column(name = "bonus_id")
>     @ElementCollection(targetClass = Long.class, fetch = FetchType.EAGER)
>     @CollectionTable(name = "aaa_bonus", joinColumns = @JoinColumn(name = "advert_post_id"))
>     public Collection<Long> bonusIds;
> }
> @Entity
> @Table(name = "bbb")
> public class BBB implements Serializable {
>     @Id
>     @GeneratedValue(strategy = GenerationType.AUTO)
>     public int id;
>     @ManyToOne(optional = false)
>     @JoinColumn(name = "aaa_id", nullable = false)
>     public AAA aaa;
>     @Column
>     public CCC ccc;
>     @Column
>     public int value;
> }
> public enum CCC {
>     AAA,
>     BBB,
>     CCC,
> }
> first fill tables:
>         AAA a = new AAA();
>         a.bonusIds = Arrays.asList(1L, 2L, 3L); // size = 3
>         em.persist(a);
>         BBB b = new BBB();
>         b.aaa = a;
>         b.ccc = CCC.AAA;
>         b.value = 1;
>         em.merge(b);
>         em.merge(b);
> second get bonusIds and check size:
>         AAA aaa = em.find(AAA.class, 6);
>         if (aaa.bonusIds.size() != 3)
>             throw new RuntimeException();
> size will be 6! but must be 3.
> generate sql:
> select aaa0_.id as id1_1_, bbb1_.aaa_id as aaa4_1_3_, bbb1_.id as id3_, bbb1_.ccc as formula0_3_, bbb1_.id as id0_0_, bbb1_.aaa_id as aaa4_0_0_, bbb1_.ccc as ccc0_0_, bbb1_.value as value0_0_, bonusids2_.advert_post_id as advert1_1_4_, bonusids2_.bonus_id as bonus2_4_ 
> from aaa aaa0_ 
> left outer join bbb bbb1_ on aaa0_.id=bbb1_.aaa_id 
> left outer join aaa_bonus bonusids2_ on aaa0_.id=bonusids2_.advert_post_id where aaa0_.id=?

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list