问题陈述: 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异常并实现我需要的东西。