【问题标题】:JPA - OneToOne Foreign key as primary keyJPA - OneToOne 外键作为主键
【发布时间】:2016-05-26 09:07:33
【问题描述】:

我有一个表,它需要它的主键作为其他表的外键,因此是单向的一对一关系。每本书只有一个作者,如下所示:

@Entity
public class Author {
    @Id
    String code;

    //getters and setters ...
}


@Entity
public class Book {
    @Id
    @OneToOne
    @JoinColumn(name="code", columnDefinition="DOM_COD5")
    Author author;

    //getters and setters
}

使用普通的 Hibernate 和 JPA 注释它工作得很好,但是通过 Spring Data 使用它我不断收到这个错误:

Caused by: java.lang.IllegalArgumentException: This class [class com.xxxx.api.catalogo.domain.Book] does not define an IdClass  

【问题讨论】:

  • 一本书可以有多个作者,但这不是重点。正如错误所说,您的主键列在哪里。
  • 您的意思是使用 Hibernate API 它“工作”,而使用 JPA API 它会抛出异常,因为 JPA API 坚持认为您满足某些条件。春天在这里与任何事情都有关
  • 我在 Spring Data 中尝试了相同的三组双向一对一注释以获得相同的结果。作者上的单独 ID 字段和 @MapsId 不会破坏应用程序上下文的加载,但它仍然因完全不同的错误而失败。也许它对你有用。

标签: hibernate jpa spring-data spring-data-jpa


【解决方案1】:

试试这个方法

@Entity
public class Book {

    @Id
    @OneToOne
    @PrimaryKeyJoinColumn
    Author author;

    ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多