Java Hibernate-保存嵌套关系的子级
我有以下方式的实体 ----------------------------------------------------实体A--------------------------------------------------------Java Hibernate-保存嵌套关系的子级,java,spring,hibernate,jpa,spring-data-jpa,Java,Spring,Hibernate,Jpa,Spring Data Jpa,我有以下方式的实体 ----------------------------------------------------实体A-------------------------------------------------------- @Entity @Table(name = "A") public class A { //bi-directional one-to-many association to B @OneToMany( mappedB
@Entity
@Table(name = "A")
public class A {
//bi-directional one-to-many association to B
@OneToMany( mappedBy = "a", cascade = { CascadeType.ALL }, fetch = FetchType.LAZY )
private List<B> b = new ArrayList<>();
public void add_B(B b) {
this.b.add(b);
b.setA(this);
}
}
@Entity
@Table(name = "B")
public class B {
@ManyToOne( fetch = FetchType.LAZY, cascade = { CascadeType.ALL } )
@JoinColumn( name = "A_ID" )
private A a;
//bi-directional one-to-many association to C
@OneToMany( mappedBy = "b", cascade = { CascadeType.ALL }, fetch = FetchType.LAZY )
private List<C> c = new ArrayList<>();
public void add_C(C c) {
this.c.add(c);
c.setB(this);
}
}
@Entity
@Table(name = "C")
public class C {
@ManyToOne( fetch = FetchType.LAZY, cascade = { CascadeType.ALL } )
@JoinColumn( name = "B_ID" )
private B b;
}
@Mapper(
componentModel = "spring",
unmappedTargetPolicy = ReportingPolicy.WARN
)
public abstract class A_Mapper {
public abstract A toEntity(DTO_A dto_a);
@AfterMapping
public void mapToEntity(@MappingTarget A a)
{
List<B> bs = new ArrayList<>(a.getB());
for (B b: bs) {
a.add_B(b);
for (C c:
b.getC() {
b.add_C(c);
}
}
}
-----------------------------地图绘制者-------------------------------------------------------------------------------------
@Entity
@Table(name = "A")
public class A {
//bi-directional one-to-many association to B
@OneToMany( mappedBy = "a", cascade = { CascadeType.ALL }, fetch = FetchType.LAZY )
private List<B> b = new ArrayList<>();
public void add_B(B b) {
this.b.add(b);
b.setA(this);
}
}
@Entity
@Table(name = "B")
public class B {
@ManyToOne( fetch = FetchType.LAZY, cascade = { CascadeType.ALL } )
@JoinColumn( name = "A_ID" )
private A a;
//bi-directional one-to-many association to C
@OneToMany( mappedBy = "b", cascade = { CascadeType.ALL }, fetch = FetchType.LAZY )
private List<C> c = new ArrayList<>();
public void add_C(C c) {
this.c.add(c);
c.setB(this);
}
}
@Entity
@Table(name = "C")
public class C {
@ManyToOne( fetch = FetchType.LAZY, cascade = { CascadeType.ALL } )
@JoinColumn( name = "B_ID" )
private B b;
}
@Mapper(
componentModel = "spring",
unmappedTargetPolicy = ReportingPolicy.WARN
)
public abstract class A_Mapper {
public abstract A toEntity(DTO_A dto_a);
@AfterMapping
public void mapToEntity(@MappingTarget A a)
{
List<B> bs = new ArrayList<>(a.getB());
for (B b: bs) {
a.add_B(b);
for (C c:
b.getC() {
b.add_C(c);
}
}
}
@Mapper(
componentModel=“spring”,
UnappedTargetPolicy=ReportingPolicy.WARN
)
公共抽象类A_映射器{
公开摘要A实体(DTO_A DTO_A);
@后映射
公共void mapToEntity(@MappingTarget A)
{
listbs=newarraylist(a.getB());
对于(B:bs){
a、 添加_B(B);
对于(C:
b、 getC(){
b、 添加_C(C);
}
}
}
保存实体A后,A的id应设置为B项,B的id应设置为C。但引发了“NullPointer异常”。有人能告诉我如何解决此问题吗?以及如何修改代码,使A和B的id都设置为C?提前谢谢,但出现了“NullPointer异常”已引发。确切位置。添加堆栈跟踪但引发“NullPointer异常”。确切位置。添加堆栈跟踪