Java 级联注释
我还有下一节课:Java 级联注释,java,hibernate,jpa,Java,Hibernate,Jpa,我还有下一节课: @Entity @Table(name="A") public class A{ @Id @NextId(sequence="A_SEQ") @Column(name="A_ID") private long aId; @OneToMany(mappedBy="a", cascade=CascadeType.ALL, orphanRemoval=true) private Set<B> bSet; @OneToMany(mappedBy="a
@Entity
@Table(name="A")
public class A{
@Id
@NextId(sequence="A_SEQ")
@Column(name="A_ID")
private long aId;
@OneToMany(mappedBy="a", cascade=CascadeType.ALL, orphanRemoval=true)
private Set<B> bSet;
@OneToMany(mappedBy="a")
private Set<E> eSet;
@OneToMany(mappedBy="a", cascade=CascadeType.ALL, orphanRemoval=true)
private Set<D>dSet;
}
@Entity
@Table(name="B")
public class B{
@Id
@NextId(sequence="B_SEQ")
@Column(name="B_ID")
private long bId;
@ManyToOne
@JoinColumn(name="A_ID")
private A a;
@OneToMany(mappedBy="b", cascade=CascadeType.ALL, orphanRemoval=true)
private Set<C> cSet;
}
@Entity
@Table(name="C")
public class C{
@Id
@NextId(sequence="C_SEQ")
@Column(name="C_ID")
private long cId;
@ManyToOne
@JoinColumn(name="B_ID")
private B b;
@OneToMany(mappedBy="c")
private Set<E> eSet;
}
@Entity
@Table(name="D")
public class D{
@Id
@NextId(sequence="D_SEQ")
@Column(name="D_ID")
private long dId;
@ManyToOne
@JoinColumn(name="A_ID")
private A a;
@OneToMany(mappedBy="d", cascade = CascadeType.ALL, orphanRemoval=true)
private Set<E> eSet;
}
@Entity
@Table(name="E")
public class E{
@Id
@NextId(sequence="E_SEQ")
@Column(name="E_ID")
private long eId;
@ManyToOne
@JoinColumn(name="D_ID")
private D d;
@ManyToOne
@JoinColumn(name="C_ID")
private C c;
@ManyToOne
@JoinColumn(name="A_ID")
private A a;
}
我得到下一个错误:
原因:java.sql.BatchUpdateException:ORA-01400:无法在“E”“C_ID”中插入NULL
我知道我得到这个错误是因为C是瞬态的。我认为级联注释有问题
我如何解决这个问题?谢谢。您的示例(设置eSet等)相当混乱。如何将值插入到集合中?请记住,必须正确分配引用。i、 如果你想把一个B实例分配给一个a实例,那么你可以这样做:public void assignB(B){bSet.add(B);B.setA(this);}实际上在代码中,我已经在DB结构中存在了。我需要复制此结构,更改所有行的ID并将其保存在DB中。您是否应用了我的建议?如果java中的引用被破坏,那么jpa无法自动设置正确的外键
newSess.saveOrUpdate(o);
newSess.flush();