我有几个具有一对一关系的实体:
@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 ;
...
但在这种情况下我不能,因为底层的“store”表属于另一个应用程序而且无法修改(通过添加“goalId”列)。
我需要的是Store的一个实例能够通过在storeGoals表中查找具有相同storeId的记录来查找其目标(当然,实现我可能会遇到参照完整性问题......)
关于如何做到这一点的任何想法? 谢谢!
答案 0 :(得分:0)
您可能正在寻找所谓的双向OneToOne关系。这与双向ManyToMany或OneToMany / ManyToOne关系的作用相同,因为该方面拥有'关系并控制在外键中设置值;另一个指定它是'映射'另一方面,因此就像只读一样运作。双方需要手动保持同步;如果您设置了一方但未反映另一方的更改,JPA将不会为您解决此问题。
在这种情况下:
public class Store implements Serializable {
..
@OneToOne(mappedby="store")
private Goal goal ;
}