[英]Hibernate Unidirectional OneToMany Not Working with composite id
我已經在鍵盤上b了兩天,試圖找出答案...
背景知識:我們有一個使用Perl代碼庫建立的數據模型,該數據庫通過ODBC向數據庫運行直接的本機SQL語句。 由於某些原因,我們決定用Java重寫代碼...我認為使用Hibernate定義所有映射是一個好主意。 我們不想編輯數據模型。
為了簡單起見,我只能用部分數據模型來表達問題。 我們有實體“ Job”,“ JobDatabase”和“ JobTable”。
Job的作業名稱為PK。 數據庫具有作業名,名稱的PK。 表的PK為job_name,src_database_name,name。 如您所料,Job與JobDatabase具有OneToMany關系,而Database與JobTable具有OneToMany關系。
為了進行此測試,我從空表開始,嘗試創建一些示例數據。 我可以插入Job和JobDatabase,但是當我嘗試插入JobTable時,Hibernate會引發錯誤。 更准確地說,那就是它抱怨的地方。 它不會開始執行我的代碼,因為它檢測到映射錯誤。 但是,如果刪除JobDatabase和JobTable之間的關聯,它將正確插入所有Job和JobDatabase記錄,沒有錯誤。
樣本類(所有字段都有getter / setter方法……還有許多其他字段):
@Entity
@Table(name="Job")
public class Job implements Serializable {
@Id
@Column(name="job_name",nullable = false)
private String jobName;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "job_name", referencedColumnName = "job_name")
private Set<JobDatabase> databases;
}
@Entity
@Table(name="JobDatabase")
public class JobDatabase implements Serializable {
@Id
@Column(name="job_name",nullable = false)
private String jobName;
@Id
@Column(name="name",nullable = false)
private String name;
@OneToMany(cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "job_name", referencedColumnName = "job_name"),
@JoinColumn(name = "name", referencedColumnName = "src_database_name")
})
private Set<JobTable> tables;
}
@Entity
@Table(name="JobTable")
public class JobTable implements Serializable{
@Id
@Column(name="job_name",nullable = false)
private String jobName;
@Id
@Column(name="src_database_name",nullable = false)
private String srcDatabaseName;
@Id
@Column(name="name",nullable = false)
private String name;
}
錯誤:
Exception in thread "main" org.hibernate.MappingException: Unable to find column with logical name: src_database_name in JobDatabase
我不斷收到此錯誤。 我不明白為什么它要在“擁有”映射的實體中查找引用的列。 src_database_name確實僅存在於JobTable中-在JobDatabase中被稱為“名稱”。 JobTable也有一個“名稱”字段,但它引用表的名稱。
您的JobDatabase表中需要有src_database_name列。 或者,您可以將src_database_name更改為其他列名。
對於復合鍵,您的源表中必須存在參考列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.