我試圖將我的@Entity
對象映射到其各自的類,其中一個是另一個的參數。休眠實體類映射到兩個不同的表
簡單地說我有這樣的事情:
@Entity
@Table(name="TableA")
public class ClassA {
@Id
private long id;
private String paramA;
private ClassB classB;
// getters and setters here
}
ClassB的樣子:
@Entity
@Table(name="TableB")
public class ClassB {
@Id
private long classAId;
private String paramB;
// getters and setters here
}
要保存我使用的接口 - (我懷疑這還是這樣,我使用這是我的問題?)
@Transactional
public interface ClassADao extends JpaRepository<ClassA, Integer> {
}
在我的數據庫中,ClassA中的所有參數映射到除ClassB外的對應表其中的參數都與ClassB的不同表格匹配。我是Hibernate的新手,希望能將ClassB的參數映射到正確的表中。然而這似乎是試圖ClassB的映射到表ClassA的一列,從而給我這個錯誤:
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'classB' in 'field list'
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
at com.mysql.jdbc.Util.getInstance(Util.java:387)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:941)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3870)
我的問題是,是否有辦法(最好是通過註釋)告訴Hibernate使ClassB中的參數映射到它自己的表中?我曾嘗試使用@SecondaryTable,但沒有奏效。
在此先感謝!
我想知道如果我需要爲ClassB創建一個不同的JpaRepository接口並分別保存它們嗎?我希望有一個級聯效應,但也許這是不可能的? – DavidR
你是否也可以給表結構,或者讓休眠生成它?從第一次看它接縫你缺少@OneToOne註釋,它告訴冬眠,你有關係。您可以查看http://www.mkyong.com/hibernate/hibernate-one-to-one-relationship-example-annotation/其中庫存有庫存詳細信息。 –
+1提供表格結構。您還沒有在代碼中定義實體A和B之間的任何關係,所以Hibernate/JPA無法知道它們是否正確映射它們。您必須通過JPA批註('@ OneToOne','@ OneToMany'等)來完成此操作。你可以谷歌JPA教程。關於你的dao ...沒有必要使它成爲'@ Transactional'(Spring數據會處理這個問題),並且由於你的id很長,所以你應該擴展'JpaRepository'。 –