我的實體有兩個外鍵,其中一個是主鍵。我在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