java - Hibernate 与多列一对一

标签 java hibernate jpa hibernate-mapping

如何使用 @OneToOne 注释绑定(bind)两列?

假设我有 2 个表 A 和 B。

表A:

  • id1(主键)
  • id2(PK)
  • 其他列

表B:

  • id1(PK)
  • id2(PK)
  • 其他列

在A类中我想写这样的东西:

@OneToOne(fetch = FetchType.EAGER, targetEntity = B.class)
@JoinColumn(name = "id1 and id2", referencedColumnName = "id1 and id2")
private B b;

是否可以使用注释来做到这一点?

谢谢。

最佳答案

您需要的是复合键。使用@IdClass@EmbeddedId

@EmbeddedId 的示例如下。

您的复合键类:

@Embeddable
public class CompositePK implements Serializable {
    protected Integer id1;
    protected Integer id2;


    // equals, hashCode
}

您的实体类:

@Entity
public class A{
    @EmbeddedId 
    private CompositePK compkey;

    @OneToOne(optional=true, mappedBy="A")
    private B b;

   ........
}

关于java - Hibernate 与多列一对一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24078369/

相关文章:

java - 在 Java 中使用注释验证字符串列表

java - JPA 2.1 标准 API : Using subselects in orderBy

java - 使用 Hibernate/JPA 和 JDK Date 的不需要的自动时区转换

java - Hibernate、id、oracle、序列

java - 如何在 Spring Data 中制作 "order by aggregate function"?

java - 扩展接口(interface)而不是实现它

java - 调用构造函数时的 NPE

java - Spring Boot @Scheduled 不起作用

hibernate - 将 Hibernate 与 Presto 结合使用

java - 使用maven部署到weblogic 11g