Spring JpaRepository删除子元素
我正在尝试执行一个非常简单的删除操作,但不知何故,自从我将DAOs更新为JpaRepository之后,它就不起作用了。基本上是这样的:Spring JpaRepository删除子元素,spring,hibernate,list,jpa,repository,Spring,Hibernate,List,Jpa,Repository,我正在尝试执行一个非常简单的删除操作,但不知何故,自从我将DAOs更新为JpaRepository之后,它就不起作用了。基本上是这样的: A a = aRepository.findOne(id); a.setSomeField("someNewString"); List<B> bList = a.getBs(); bList.clear(); aRepository.saveAndFlush(a); 还是一样 A类看起来像这样: @Entity @Table(name = "
A a = aRepository.findOne(id);
a.setSomeField("someNewString");
List<B> bList = a.getBs();
bList.clear();
aRepository.saveAndFlush(a);
还是一样
A类看起来像这样:
@Entity
@Table(name = "A")
public class A implements Serializable {
private static final long serialVersionUID = -1286451120913657028L;
@Column(name = "id", length = 16, nullable = false, updatable = false)
@GenericGenerator(name = "uuid", strategy = "uuid2")
@GeneratedValue(generator = "uuid")
@Basic(fetch = FetchType.EAGER)
@Id
protected UUID id;
@OneToMany(mappedBy = "a", fetch = FetchType.EAGER)
@Cascade({ CascadeType.ALL })
List<B> bList;
// getter + setter
}
setter和getter都尽可能简单:
public List<B> getBList() {
return bList;
}
public void setBList(List<B> bList) {
this.bList = bList;
}
公共列表getBList(){
返回bList;
}
公共列表(列表bList){
this.bList=bList;
}
更多信息:
- 春季3.2.2
- 休眠4.2.2
- spring数据共享1.5.1
- spring数据jpa 1.3.2
A.bList
属性,如下所示:
public class A {
@OneToMany(mappedBy = "a", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
List<B> bList;
}
您应该避免直接公开集合,而是返回集合的不可变版本,以防止客户端在A类不知道的情况下直接修改集合A
管理B
列表,因此它应该完全控制它
public class A {
public List<B> getBList() {
return Collections.unmodifiableList(bList);
}
}
公共A类{
公共列表getBList(){
返回集合。不可修改列表(bList);
}
}
希望有帮助。B班是什么样子的?还有A.getBs()方法?更新了最初的帖子。谢谢!我现在让它工作了:我把
CascadeType.ALL
放在@OneToMany
注释中。之前,我不得不使用hibernate的@Cascade
注释。现在我将保留这两个注释。而且我还添加了删除=true
。用于清除列表a.getBList().clear();a.保存和刷新(a)代码>足够了。:)
public class A {
@OneToMany(mappedBy = "a", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
List<B> bList;
}
public class A {
public void clearBList() {
for (B b : bList) {
b.releaseA();
}
bList.clear();
}
}
public class B {
void releaseA() {
this.a = null;
}
}
public class A {
public List<B> getBList() {
return Collections.unmodifiableList(bList);
}
}