关联表和休眠

时间:2017-02-23 22:08:34

标签: java mysql hibernate jpa

问题陈述: CRUD具有多个类别的消息,而CRUD操作不会影响类别。

我有两张桌子:分类和留言。 “类别”表旨在特定于用户帐户,并将在多个功能中共享,类似于“标记”。 Message表特定于某个功能,并标有0 .. * Categories。 Category表并不需要知道哪个功能引用它,所以我创建了一个关联表来存储关系Cat_Msg,它引用了每个表的PK。

|---------|
|Category |
|_________|
     |
     |
|--------|
|Cat_Msg |
|________|
     |
     |
|--------|
|Message |
|________|

我遇到的问题是在Hibernate的Message模型中。我要么得到这个例外:

org.hibernate.TransientObjectException: object references an unsaved transient instance

或者如果我将Cascade = CascadeType.ALL添加到Message注释中,则在删除Message时删除Category。

我认为问题类似于this,但我遇到的问题是类别没有条目的条目,所以我无法交换所有权。或this网站,但我不想要关联表数据,我需要类别。

代码示例:

@XmlRootElement
@Entity(name = "category")
public class Category {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String name;
}

@XmlRootElement
@Entity(name = "message")
public class Message {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    private String message;
    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinTable(name = "cat_msg", joinColumns = { @JoinColumn(name = "cat_id", referencedColumnName = "id") },
        inverseJoinColumns = { @JoinColumn(name = "msg_id", referencedColumnName = "id") })
    private Collection<Category> categories;
}

我意识到CascadeType.ALL导致了类别条目的删除,但我不知道如何解决它,以免得到hibernate异常并实现我需要的东西。

0 个答案:

没有答案