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();