我的实体有两个外键,其中一个是主键。我在JPA Wiki中读到,如果子项的(采购)主键与父项(文章)的主键相同,则建立 @OneToOne 关系。
@SuppressWarnings("serial")
@Entity
public class Procurement implements Serializable {
@Id
@OneToOne
// the child's primary key is the same as the parent
@JoinColumn(name = "articleId", referencedColumnName = "id")
private Article article;
@OneToOne
@JoinColumn(name = "supplierId", referencedColumnName = "id")
private Supplier supplier;
按照标准方法,JpaRepository 应该如下所示:
@Repository
public interface IProcurementRepository extends
JpaRepository<Procurement, Article>
但是,如果我想调用 findOne 方法(它查找主键)传递一个“Article”对象,Hibernate 会抛出一个异常。
org.hibernate.TypeMismatchException:为类 de.willms.spring.myerp.model.Procurement 提供了错误类型的 id。预期:类 de.willms.spring.myerp.model.Procurement,得到类 de.willms.spring.myerp.model.Article
DB表结构:
表“文章”(ID,短文本)
表“供应商”(ID、名称)
表“采购”(articleID、supplierID、price)
我必须更改什么才能通过相应的“物品”对象找到“采购”记录?