Hibernate,抽象类和通用实体

时间:2015-10-04 16:05:52

标签: java hibernate

我有一个名为AbstractUser的抽象类和两个子类OrganisationUserOrganisationUser相同,但附加功能。

我还有一个名为notes

的课程

Organisation可以创建notes user可以保存笔记。所以备注属于一个Organisation,但可以通过很多user个对象

保存

是否可以正确设置notes两者与user的ManyToMany关系以及与组织的ManyToOne关系?

我非常喜欢下面的关系,

     note_user                              note_organisation
note_id    user_id   id(incremented)    note_id     organisation_id
  1          4            1               1               2
  1          3            2               2               2
  2          3            3               3               3

这是我到目前为止所得到的。 组织:

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long OrganisationId;

    @OneToMany(fetch = FetchType.LAZY, cascade = { CascadeType.ALL })
    @JoinTable(name = "organisation_note", joinColumns = { @JoinColumn(name = "OrganisationId") }, inverseJoinColumns = { @JoinColumn(name = "note_id") })
    private Set<Note> bookmarks = new HashSet<>();

用户:

@Id
@GeneratedValue(strategy=GenerationType.AUTO) 
private long userId;

@ManyToMany( fetch = FetchType.LAZY, cascade = { CascadeType.PERSIST }  )
    @JoinTable(
            name = "user_note",
            joinColumns = {@JoinColumn(name = "userId")},
            inverseJoinColumns = {@JoinColumn(name = "note_id")})
    private Set<Note> notes = new HashSet<>();

请注意:

@Id  
@GeneratedValue(strategy=GenerationType.AUTO)
private long projectId; 

//Is this even necessary? I never save users to notes
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL )
private Set<User> users = new HashSet<>();

以上作品。但它表现得非常奇怪。当我创建笔记或向用户保存笔记时,我会一直得到重复的行。这也允许我用组织对象创建两个音符,但第三个会给我一个错误,说明主要的重复键,与创建的第一个音符相同的主键。我能做些什么使我的代码更加一致和可靠吗?

保存对象:

session = HibernateUtil.getSessionFactory().getCurrentSession();    
        session.beginTransaction();
        session.persist(entity);
        try {
            session.flush();
        } catch (Exception e) {
            System.out.println("Error flushing");
        }
        session.getTransaction().commit();

0 个答案:

没有答案