【发布时间】:2015-03-24 22:21:57
【问题描述】:
在我的项目中,我有下面报告的类,具有双向关系映射。 当我尝试删除关系的父对象(在我的情况下为 DataProvider)时,主对象被删除,而子对象不会被删除。 我还测试了其他几种注释组合,但似乎都不起作用(orphanRemoval、@ElementDependent、可选 = false、...)。
删除是通过这样的查询完成的:
Query q = em.createQuery("DELETE FROM DataProvider dp WHERE ... ");
q.executeUpdate();
谁能给点建议?
@Entity(name = "DataProvider")
public class DataProviderImpl implements DataProvider {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String name;
// ...
@OneToMany(targetEntity=RestMethodImpl.class, fetch=FetchType.LAZY, mappedBy="dataProvider", cascade={CascadeType.PERSIST,CascadeType.REMOVE})
private List<RestMethod> methods;
public DataProviderImpl() {
super();
this.id = 0;
}
@Override
public int getId() {
return id;
}
@Override
public void setId(int id) {
this.id = id;
}
@Override
public String getName() {
return name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public List<RestMethod> getMethods() {
return methods;
}
@Override
public void setMethods(List<RestMethod> methods) {
this.methods = methods;
}
}
.
public interface DataProvider {
public int getId();
public void setId(int id);
public String getName();
public void setName(String name);
public List<RestMethod> getMethods();
public void setMethods(List<RestMethod> methods);
}
.
@Entity(name = "RestMethod")
public class RestMethodImpl implements RestMethod {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String nickname;
// ...
@ManyToOne(targetEntity=DataProviderImpl.class, fetch=FetchType.LAZY)
@JoinColumn(name="dataProviderId")
private DataProvider dataProvider;
public RestMethodImpl() {
super();
this.id = 0;
}
@Override
public int getId() {
return id;
}
@Override
public void setId(int id) {
this.id = id;
}
@Override
public String getNickname() {
return nickname;
}
@Override
public void setNickname(String nickname) {
this.nickname = nickname;
}
@Override
public DataProvider getDataProvider() {
return dataProvider;
}
@Override
public void setDataProvider(DataProvider dataProvider) {
this.dataProvider = dataProvider;
}
}
.
public interface RestMethod {
public int getId();
public void setId(int id);
public String getNickname();
public void setNickname(String nickname);
public DataProvider getDataProvider();
public void setDataProvider(DataProvider dataProvider);
}
.
【问题讨论】:
-
好吧,它实际上看起来类似于第一个链接(DELETE WHERE 问题),即使在我的情况下没有抛出任何异常。我想我还是应该听从那个帖子的建议..
-
据我所知,您指定 RestMethodImpl 是关系的所有者,因为 DataProviderImpl 声明关系由另一方映射(因此拥有)。