簡體   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