java - @Embeddable 是 Foo.class 的 PK 和 Bar.class 的 FK 到 Foo.class

标签 java hibernate spring-data-jpa hibernate-mapping jpa-2.2

我正在尝试在无法重新设计的数据库上定义 JPA 层。 该层包含一对多关系,其中“多”部分具有一个外键,该外键由与“一个”部分作为主键相同的 2 个字段组成。

@Embeddable
public class FooKey implements Serializable {

    @Column(name="foo_id")
    private String id;
    private String secondaryId;
}

public class Foo {
   @EmbeddedId
   private FooKey id;
   (...)
}

public class Bar {
    @Id
    private Long id;
    (...)

    //@Embedded FooKey fooKey;
    @ManyToOne
    private Foo foo;
   }

我该如何解决这个问题?我收到错误 @Column(s) not allowed on a @ManyToOne property

最佳答案

我设法通过以下方式做到这一点:

  @ManyToOne
  @JoinColumns({
            @JoinColumn (name = "foo_id", referencedColumnName = "foo_id"),
            @JoinColumn (name = "secondary_id", referencedColumnName = "secondary_id")
  })
  private Foo foo;

尽管如果有人有更优雅的解决方案,我会接受

关于java - @Embeddable 是 Foo.class 的 PK 和 Bar.class 的 FK 到 Foo.class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60214407/

相关文章:

Java 9 : jigsaw and hibernate 5. 2.12 不工作

java - 如何使 JPA @query 与包含另一个投影的投影一起使用

java - 使用 AttributeConverter 转换为 UUID 导致 'No Dialect mapping for JDBC type' 异常

java - Spring Data JPA 持久化实体,具有嵌套的复合主键实体,其本身是一个在持久化时分离的嵌套实体

hibernate - 交易所需异常 : no transaction is in progress while using JPAItemWriter

spring-boot - 服务器故障后 Spring 批处理文件恢复

java - 生成阿拉伯语二维码

java - 使用 Java 数组列表

java - 重构方法以使用泛型

Java控制台编码问题