播放Ebean列表null

时间:2014-11-17 15:16:58

标签: java playframework-2.0 ebean

使用Ebean保存对象列表时出现问题。

我有三节课。最后一个包括两个孩子班。

@Entity
@Table(name="A")
public class A extends Model {

    @Id
    public String idA;

    @OneToMany(cascade=CascadeType.ALL, mappedBy = "currentA")
    private List<B> listOfB;   
}

第二节课B:

@Entity
public class B  extends Model  {

    @Id
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    public Long idB;

    @ManyToOne
    @JoinColumn(name = "idA")
    private A currentA;

    @OneToMany(cascade=CascadeType.ALL, mappedBy = "currentB")
    public ArrayList<C> lstOfC;

    public B(List<C> lstC) {
        this.lstOfC=lstC;
    }
}

最后一个:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorValue("X")

public class C extends Model {

    @ManyToOne
    @JoinColumn(name = "idB")
    private B currentB;

    private setcurrentB(int currentB) {
        this.currentB=currentB;
    }      
}

我面临的问题是我需要创建一个C对象列表(lstOfC),但是当我将该元素放入列表时,我不知道currentB的值。 我需要稍后设置(使用setter)此值,然后将其保存到数据库中。

但是当我尝试这个时,C对象列表在A的B列表中为空。

ArrayList<C> lstC=new ArrayList<C>();

c1=new C();
c2=new C();
B=new B(lstC);

for (C c: lstC) {
    c.setcurrentB(1);
    Ebean.save(c);
}

1 个答案:

答案 0 :(得分:2)

你的例子并不合理,其中setcurrentB(1)...取1但是期望B的实例 - 我认为它是一个参考bean。

您似乎想要暂时关闭级联持久性,您可以在事务中执行此操作。

Transaction tranaction = Ebean.beginTransaction();
try {
  // turn off persist cascade for this transaction
  transaction.setPersistCascade(false);

  for (C c: listC) {

  }

  Ebean.commitTransaction();

} finally {
  Ebean.endTransaction();
}