hibernate - JPA/hibernate : create a primary key which is a primary key of another table

标签 hibernate jpa jpa-2.0 one-to-one

我有这个简单的User实体:

@Entity
@Table(name = "fdei_user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String login;
}

我想创建第二个表 UserDetail,其中包含字段 idproperty1

在第二个表UserDetail中,我不想要生成的递增ID,但我希望字段id是相同的idUser 中用户的信息,我希望当我获取 UserDetail id=1 时,也会获取 id=1 的 User 实体。

@Entity
@Table(name = "fdei_user_details")
public class UserDetails {

    @Id
    @OneToOne
    @PrimaryKeyJoinColumn(name="id", referencedColumnName="id")
    private User id;

    private Boolean property1;
}

我怎样才能意识到这一点? 我尝试过 @OneToOne、@PrimaryKeyJoinColumn、@MapsId...但没有任何结果...我总是有错误。

什么是正确的方法?

非常感谢, 安德里亚

最佳答案

  • 您正在寻找的是单向 @OneToOne 关系。
  • 您需要 @Id 字段和关系 (User user) 字段。
  • 请注意@MapsId的使用,以确保详细信息表中只有一个关键字段。

我添加了这个答案,因为评论中发布的所有来源都没有引用@MapsId

@Entity
@Table(name = "fdei_user_details")
public class UserDetails {

    @Id
    @Column(name = "id", updatable = false, nullable = false)
    private Long id;

    @MapsId
    @OneToOne
    @JoinColumn(name = "id", referencedColumnName = "id")
    private User user;

    private Boolean property1;

    // getters and setters
}

关于hibernate - JPA/hibernate : create a primary key which is a primary key of another table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48746127/

相关文章:

java - 在 Hibernate 中绕过 GeneratedValue(合并不在数据库中的数据?)

jpa-2.0 - 在 eclipselink 中执行 UPDATE 而无需 SELECT

java - 使用 hibernate 从 URL 获取参数值而不使用请求对象?

java - 连接多个辅助表

java - 带有 Spring boot jpa 错误 : "Unable to extract OUT/INOUT parameter value" 的 SQL 服务器过程调用

hibernate - 如何使用JPA Criteria Builder编写查询(包括子查询和存在查询)

java - JPA 查询 - 如何获得特定的结果集?

java - 有没有一种方法可以在 Hibernate 中加载对象而无需编写查询或具有 ID?

java - 如何从数据库中检索数组

java - 在 Hibernate 中从数据库加载属性?