我有三个表,假设 A、B 和 C:

Table A
id
country
B_id

Table B
id
name

Table C
country
name
description

表 C 有一个由列组成的复合 PK: countryname

现在我想建立一个从表 A 的实体到表 C 的实体的 OneToOne 连接。

实体 C:
@Table(name = "C")
public class C {

    @EmbeddedId
    private CountryName id;
    @Column(nullable = false)
    private String description;
...
}

在实体 A 中,我正在尝试这样的事情:
@Table(name = "A")
public class A {

    @Id
    @Type(type = "pg-uuid")
    private UUID id;

    @Column(nullable = false)
    private String country;

    @JoinColumn(updatable = false, insertable = false)
    private B b;

    @OneToOne(optional = false)
    @JoinColumns({
          @JoinColumn(name = "country"),
          @JoinColumn(name = "B.name")
    private C c;

name 表的 B 列的引用不起作用。你能帮助了解如何实现这一目标吗?

最佳答案

我认为@JoinColumns应该在C类,A类可以使用mappedBy元素:

@Table(name = "A")
public class A {
    @OneToOne(optional = false, mappedBy = "id")
    private C c;
}
@Table(name = "C")
public class C {
    @EmbeddedId
    @JoinColumns({
        @JoinColumn(name = "id.country"),
        @JoinColumn(name = "id.name")
    })
    private CountryName id;
}

关于java - 具有来自相关表的列的复合 PK 的 OneToOne,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58976650/

10-10 21:53