Hibernate Unidirectional @ManyToMany

时间:2017-05-29 18:28:05

标签: java hibernate many-to-many

我在帐户和群组之间存在多对多的关系。组表的数据已预先填充,并且不会添加其他组。

使用Hibernate,我的愿望是:

  1. 在帐户表中添加帐户
  2. 将记录添加到account_group表和
  3. 将记录添加到群组表
  4. 在我看来,无论我做什么,我总是在组表中获得重复记录。这是我的问题。这是我的代码:

    Account.java

    @Entity
    @Table(name = "account", schema = "admin")
    public class Account {
    
        @Id
        @GeneratedValue
        private UUID id;
    
    ...
    
        @ManyToMany(fetch = FetchType.EAGER, cascade = { CascadeType.PERSIST, CascadeType.MERGE })
        @JoinTable(name = "account_grouping", schema = "admin", joinColumns = @JoinColumn(name = "account_id"), inverseJoinColumns = @JoinColumn(name = "grouping_id"))
        private Set<Grouping> groupings;
    
    ...
    
        // getters and setters
    
    }
    

    Grouping.java

    @Entity
    @Table(name = "grouping", schema = "admin")
    public class Grouping {
    
    ...
    
        @Id
        @GeneratedValue
        private UUID id;
    
    ...
    
        // getters and setters
    
    }
    

    AccountDao.java

    @Repository
    public class AccountDao extends AbstractJpaDao<Account, String> {
    
    ...
    
        @Transactional
        public boolean create(Account newAccount) {
            try {
                getEntityManager().merge(newAccount);
                return true;
            } catch(Exception e) {
                System.out.println("Danger, Will Robinson!: " + e);
                return false;
            }
        }
    
    }
    

    我查了很多关于Hibernate @ManyToMany示例的问题和网站,但我必须遗漏一些东西。感谢您的阅读和帮助。

1 个答案:

答案 0 :(得分:1)

不幸的是我没有足够的代表发表评论,所以我将猜测作为答案。在保存实体之前,请确保在为您的帐户选择组时,组实体具有ID。否则,Group实体将被视为新对象,并将保存到分组表中。