使用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);
}
答案 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();
}