2016-05-06 64 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