2014-06-28 54 views
2

我運行的一些問題與ebean(使用播放框架2版本2.2.1) 我有兩個類:發揮框架2 ebean @ManyToOne列指定了兩次

我的圖類:

public class Graph extends Model { 
    @Id 
    @Column(name="id") 
    private String id; 

    @Column(name="type") 
    private String type; 

    @OneToMany(mappedBy="valGraph", cascade=CascadeType.ALL) 
    private List<Val> valItems; 

和我的價值類(Val.graphId外鍵Graph.id):

public class Val extends Model 
    @Id 
    @Column(name="valId") 
    private String valId; 

    @Id 
    @Column(name="graphId") 
    private String graphId; 

    @Column(name="Key") 
    private String Key; 

    @Column(name="Value") 
    private String Value; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name="graphId") 
    private Graph valGraph; 

而是試圖挽救一個新項目時,我得到這個錯誤:

javax.persistence.PersistenceException: ERROR executing DML bindLog[] error[Column 'graphId' specified twice]

+1

可能重複[PersistenceException,列'id'指定兩次](http://stackoverflow.com/questions/24377478/persistenceexception-column-id-specified-twice) –

+1

這是[此問題的重複](http://stackoverflow.com/questions/24377478/persistenceexception-column-id-specified-twice)。即你的@Column(name =「graphId」)和@JoinColumn(name =「graphId」)具有相同的名稱。改一個。 –

+0

多諾萬,感謝您的快速回答, 我看了這個問題,但不明白的東西, 通過更改'@Column(name =「graphId」)'我得到: **查詢拋出SQLException:Unknown列't0.graphId1' 在字段列表** 並通過改變 '@JoinColumn(NAME = 「graphId」)' 我得到: ** javax.persistence.PersistenceException未知列 'graphId1' ** 我是什麼?不理解這裏? – amitben

回答

7

經過網絡上的衆多搜索者,我發現這個答案here - 感謝jtal!

只是爲了總結的問題:

使用Ebean我已經未在數據庫中,無論如何實現的@ManyToOne實體, 更連接字段,在我的情況

graphId

是一個有自己價值的有效領域。

試圖加入欄上那場的時候,它總是會失敗,因爲它創建了一個SQL查詢:

SELECT 
* 
FROM 
    Val; 

select 
    t0.valId c0, 
    t0.graphId c1, 
    t0.Key c2, 
    t0.Value c3, 
    t0.graphId c4 <---- notice this duplicate 
from 
    graph_val t0 

爲了解決這個問題,我告訴ebean 不使用第二組屬性

我的新ebean元素看起來是這樣的:

@ManyToOne(fetch = FetchType.LAZY) 
@JoinColumn(name="graphId", insertable = false, updatable = false) 
private Graph valGraph; 

和它的作品! =)