【发布时间】:2014-11-08 09:53:18
【问题描述】:
我的实体:
@Entity
public class User{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "userId")
private Long id;
@OneToMany(mappedBy = "user", cascade = CascadeType.ALL)
private List<UC> owned = new ArrayList<UC>();
}
@Entity
public class UC{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@JoinColumn(name = "ukId")
private Long id;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "userId")
private User user;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "catId")
private Cat cat;
}
@Entity
public class Cat{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "catId")
private Long id;
@OneToMany(mappedBy = "cat", cascade = CascadeType.ALL)
private List<UC> owned = new ArrayList<UC>();
}
所以这是我的问题,实际上很少。
问题 #1:
我删除了一个 Cat 对象,我在 Cat 的拥有列表上设置了 cascadeType.All,所以当我删除 Cat 对象时,UC 中所有带有 Cat 的记录都将被删除,但是我得到“删除的对象将被重新保存通过级联”,那是因为我在 UC 中与用户有另一个关系,他将 UC 存储在列表中。当我从 UC 中删除 Cat 对象和记录时,我不想删除 User 对象,因此在 UC 中在 @ManyToOne 上设置级联是不行的。我应该怎么做?在删除 Cat 之前,我应该从用户拥有的列表中删除所有 UC 实例吗?如果是这种情况,我在 UC 中的关系比此处显示的要多,我也必须从其他列表中删除实例。
问题 #2:
类似的情况,但我有常规的多对多关系我想删除连接表记录而不删除关系的另一端。
【问题讨论】:
-
不确定我是否完全明白这一点:是否要删除一个 Cat 实体并自动删除 UC 表中对该 cat 的所有引用?
-
是的,但不会删除用户或其他相关实体。当我在 UC 中不使用级联时,我在删除用户时收到错误消息。我只想删除Cat, UC 中包含Cat 的记录并更新猫的用户列表。