【问题标题】:Play Ebean List null播放 Ebean 列表 null
【发布时间】:2014-11-17 15:16:57
【问题描述】:

我在使用 Ebean 保存对象列表时遇到问题。

我有一个三班。最后一个包括两个儿童班。

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

    @Id
    public String idA;

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

二等乙:

@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 的值。 我需要稍后设置(使用设置器)这个值,然后将其保存到数据库中。

但是当我尝试这样做时,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);
}

【问题讨论】:

    标签: java playframework-2.0 ebean


    【解决方案1】:

    您的示例在 setcurrentB(1) ... 取 1 但需要一个 B 的实例时不太有意义 - 我认为这是一个参考 bean。

    您似乎想暂时关闭级联持久性,您可以在 Transaction 上执行此操作。

    Transaction tranaction = Ebean.beginTransaction();
    try {
      // turn off persist cascade for this transaction
      transaction.setPersistCascade(false);
    
      for (C c: listC) {
    
      }
    
      Ebean.commitTransaction();
    
    } finally {
      Ebean.endTransaction();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      相关资源
      最近更新 更多