没有列映射的JPA一对一关系

时间:2016-05-06 18:48:04

标签: 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 ;
       ...

但在这种情况下我不能,因为底层的“store”表属于另一个应用程序而且无法修改(通过添加“goalId”列)。

我需要的是Store的一个实例能够通过在storeGoals表中查找具有相同storeId的记录来查找其目标(当然,实现我可能会遇到参照完整性问题......)

关于如何做到这一点的任何想法? 谢谢!

1 个答案:

答案 0 :(得分:0)

您可能正在寻找所谓的双向OneToOne关系。这与双向ManyToMany或OneToMany / ManyToOne关系的作用相同,因为该方面拥有'关系并控制在外键中设置值;另一个指定它是'映射'另一方面,因此就像只读一样运作。双方需要手动保持同步;如果您设置了一方但未反映另一方的更改,JPA将不会为您解决此问题。

在这种情况下:

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