我的实体有两个外键,其中一个是主键。我在JPA Wiki中读到,如果孩子的(采购)主键与父母的(文章)主键相同,则建立@OneToOne关系。Hibernate寻找错误的主键
@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-方法(查找主键)提供的“条”对象,Hibernate会抛出一个异常。
org.hibernate.TypeMismatchException:提供了错误类型的ID为 类de.willms.spring.myerp.model.Procurement。预计:类 de.willms.spring.myerp.model.Procurement,得到了类 de.willms.spring.myerp.model.Article
数据库表结构:
表“的文章“(ID,shortText)
表 ”供应商“(ID,姓名)
表 ”采购“(条款ArticleID,供应商ID,价格)
我需要更改哪些内容才能找到相应的“Article”对象的“采购”记录?
你的问题是有点混乱。你说**采购**是孩子,**第**条是父母,但采购不是从条款延伸。而且这是一个有点怪异,你有两个**标识**和** ** OneToOne注解的同时东西。 ** Id **表示一个数据列(或者如果使用复合键则为列)而** OneToOne **实际上是两个表之间的关系。你能否提供你的数据库表结构来让人们帮助你? – spiritwalker 2013-04-09 09:02:25