繁体   English   中英

@ManyToOne字段在Playframework 2中不起作用

[英]@ManyToOne field not working in Playframework 2

我在游戏框架中遇到一些持久性问题。 我不认为我要努力做的事情很难,所以我不明白为什么我所做的只是行不通。 我创建了一个实体,该实体通过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; 
}

您不是在告诉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; 
}

另一件事是, ManyToOne上具有CascadeType.ALL情况相当ManyToOne ,因为如果删除一个CrossTrade ,它也会同时删除附加的CurVal ,但将所有其他CrossTrades CurVal为孤立的CurVal 绝对应该相反,即将CascadeType.ALL放在OneToMany字段上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM