Jpa - 与'mappedBy'相同的两个@OneToOne关系

时间:2014-07-31 14:01:00

标签: java jpa annotations

我有两个java-classes / db-tables:'message'和'thirdparty'

@Entity
public class Message {
    @OneToOne(mappedBy = "message")
    private ThirdParty source = null;

    @OneToOne(mappedBy = "message")
    private ThirdParty target = null;

    ....
}

@Entity
public class ThirdParty {
    @OneToOne(targetEntity = Message.class)
    @JoinColumn(name = "Message", referencedColumnName = "mess_id", nullable = false)
    private Message message = null;

    @Column(name = "isSource", nullable = false)
    private Boolean isSource = null;
}

Message有两个对ThirdParty的引用,可以通过isSource(如果它们是源或目标)来区分。

这是jpa以设计/注释的方式无法解决的。但有没有办法通过添加一些注释或某种特殊的sql语句来实现这一点?

1 个答案:

答案 0 :(得分:0)

这在概念上是错误的。你不能做这个。当以下列方式映射两个实体时,会发生OneToOne映射:
实体1:具有主键(PK1)和其他键以及外键(FK)
实体2:有主键(PK2) 现在FK以这样的方式映射到PK2:对于每次出现的PK,必须有一个且只有一个匹配的FK出现。