【问题标题】:Hibernate One To One mapping, Foreign Key is NULLHibernate 一对一映射,外键为 NULL
【发布时间】:2021-11-20 10:57:30
【问题描述】:

这是我第一次尝试使用一对一关系进行映射。我有以下实体:

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Client {

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

    @Size(max = 100)
    private String name;

    @Email(message = "Email should be valid")
    private String email;

    @OneToOne
    @PrimaryKeyJoinColumn
    private Key key;
}

@Entity
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Key {

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

    @Column(unique = true)
    private UUID number;

    @OneToOne
    private Client client;

    public Key(UUID number) {
        this.number = number;
    }
}

他们看不到对方,我在外键部分得到 NULL。在下面的帖子中使用EntityManager类时有一个解决方案:

JPA / Hibernate OneToOne Null in foreign key

很遗憾,这种方法对我不起作用。

数据库快照:

感谢您的回答!

【问题讨论】:

  • 删除 @PrimaryKeyJoinColumn 并确保您设置了 Key
  • 并尝试使用JoinColumn

标签: java spring hibernate jpa orm


【解决方案1】:

我们不需要提及@PrimaryKeyJoinColumn 注释。当我们映射表时,它将创建主键和外键。我们只需要正确映射即可。
在客户端模型类中,您必须创建如下映射

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "key_id", referencedColumnName = "id")
    private Key key;

在这样的 Key 模型类中

    @OneToOne(mappedBy = "key")
    private Client client;

【讨论】:

    猜你喜欢
    • 2012-03-22
    • 1970-01-01
    • 2016-09-18
    • 2021-08-18
    • 2012-04-21
    • 1970-01-01
    • 2014-11-22
    相关资源
    最近更新 更多