@ManyToOne字段在Play Framework 2中不起作用

时间:2014-01-16 12:18:00

标签: java jpa playframework-2.0 ebean

我正在努力解决playframework中的一些持久性问题。我不认为我想做的事情应该是努力的,所以我无法理解为什么我所做的只是不起作用。我创建了一个实体,它通过ManyToOne映射引用另一个实体(在下面的例子中为cv)。主要实体被持久化,参考实体似乎也被持久化。但是每当我通过实体加载主实体时。主实体加载的findAll()方法,但引用实体上的所有值都为null。

甚至更奇怪的是主要实体似乎具有正确的ID,它只是没有加载的引用实体。我知道这一点,因为当我启动我的应用程序时,我在主实体(CrossTrade)和引用的实体(CurVal)上执行find.all并且它正在查找所有带有值的引用实体和具有价值观的主要实体。它只是出于某些原因,当我加载它时似乎没有从CrossTrade实体中获取引用的实体值。任何帮助将不胜感激。

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

    @Id
    @GeneratedValue
    public Long id;

    @Transient
    public Double quantity = 1.00;

    @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
    public CurVal cv;
 }

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

    @Id
    @GeneratedValue
    public Long id;

    public Double high;
    public Double low;
    public Double fee; 
}

1 个答案:

答案 0 :(得分:0)

您没有告诉Ebean ManyToOne引用的映射位置。

尝试将您的CurVal课程更新为:

@Entity
@Table(name="CurVal")
public class CurVal extends Model{
    @Id
    @GeneratedValue
    public Long id;

    @OneToMany(mappedBy="cv")
    public Set<CrossTrade> trades;

    public Double high;
    public Double low;
    public Double fee; 
}

另一件事是,CascadeType.ALL上的ManyToOne相当破碎,因为如果删除一个CrossTrade,它也会删除附加到它的CurVal,但是将所有其他CrossTrades作为孤儿留给CurVal。无论如何,它应该是相反的方式,即将CascadeType.ALL放在OneToMany字段上。