2016-05-06 62 views
0

我有一個一對一關係,因爲這樣一對夫婦的實體:沒有列映射JPA一個一對一的關係

@Entity(name="stores") 
public class Store implements Serializable { 
    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    @Column(name="id") 
    private int id ; 
    // How should I set goal ? 
    private Goal goal ; 
} 

和:

@Entity(name="storeGoals") 
public class Goal { 
    @Id 
    @GeneratedValue(strategy= GenerationType.AUTO) 
    @Column(name="goalId") 
    private int id ; 

    @OneToOne() 
    @JoinColumn(name = "storeId") 
    private Store store ; 

} 

我的問題是如何能我在Store實體中設置了「目標」字段?

通常情況下,我會做這樣的事情:

@Entity(name="stores") 
    public class Store implements Serializable { 
     ... 
     @OneToOne() 
     @JoinColumn(name = "goalId") 
     private Goal goal ; 
     ... 

但在這種情況下,我不能,因爲潛在的「專賣店」表屬於另一個應用程序,並且不能被修改(通過添加「 goalId「列)。

我需要的是Store的一個實例能夠通過在storeGoals表中找到一個具有相同storeId的記錄來查找其目標(當然瞭解我可以遇到參照完整性問題......)

關於如何做到這一點的任何想法? 謝謝!

+0

什麼storegoals表?你是不是隻是想重用Goal.storeId foriegn密鑰關係,還是存在一個關係表'storeGoals'來映射這兩個表? – Chris

回答

0

您可能正在尋找什麼是雙向OneToOne關係。這與雙向ManyToMany或OneToMany/ManyToOne關係的作用相同,即「擁有」關係並控制設置外鍵中的值;另一個指定它被另一端'映射',並且如同它是隻讀一樣操作。儘管雙方都需要手動保持同步,如果您設置了一方但未反映另一方的更改,JPA將不會爲您解決此問題。

在這種情況下:

public class Store implements Serializable { 
    .. 
    @OneToOne(mappedby="store") 
    private Goal goal ; 
} 
+0

這很簡單,我很慚愧,我不得不問! – Eric