本文介紹了如何在Hibernate中定義復合外鍵映射?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有兩個表:USERS和USERDILES如下:
package com.example.easynotes.model;
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Table(name = "users")
@IdClass(UserID.class)
public class User implements Serializable {
@Id
int id;
@Id
String name;
String department;
//getters and setters
}
用戶詳細信息類如下:
public class UserDetails implements Serializable{
int id;
String name;
String address;
String otherFields;
//getters and setters
}
USERS中的id和name是一個復合主鍵,我希望用戶詳細信息中的相同字段作為外鍵。如何在休眠中實現這一點?
推薦答案
我們需要將兩個鍵都放在@Embeddable
中以分離復合鍵,然后使用@EmbeddedId
將其放入User
實體中,并使用Hibernate Relational Mapping
…
映射這兩個主鍵
Composite Primary Key
有兩個選項:
-
使用
@EmbeddedId
使用
@IdClass()
下面是示例:
———————————–使用EmbeddedID———————————–
復合主鍵:
@Embeddable
public class UserIdName implements Serializable {
int id;
String name;
// getter and setter
}
用戶:
@Entity
@Table(name = "users")
public class USER{
@EmbeddedId
private UserIdName id;
String department;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private Set<Userdetail> userdetail;
// getter and setter
}
用戶詳細信息:
@Entity
@Table(name = "Userdetail")
public class Userdetail {
@Id
private int detail_id;
@ManyToOne
@JoinColumns({ @JoinColumn(name = "id", referencedColumnName = "id"),
@JoinColumn(name = "name", referencedColumnName = "name") })
private USER user;
String address;
String otherFields;
// getter setter
}
———————————–使用IDClass———————————–
復合主鍵:
public class UserIdName implements Serializable {
int id;
String name;
// getter and setter
}
用戶:
@Entity
@Table(name = "users")
@IdClass(UserIdName.class)
public class USER{
@Id
int id;
@Id
String name;
String department;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
private Set<Userdetail> userdetail;
// getter and setter
}
用戶詳細信息:
@Entity
@Table(name = "Userdetail")
public class Userdetail {
@Id
private int detail_id;
@ManyToOne
@JoinColumns({ @JoinColumn(name = "id", referencedColumnName = "id"),
@JoinColumn(name = "name", referencedColumnName = "name") })
private USER user;
String address;
String otherFields;
// getter setter
}
->;如果要手動插入兩個外鍵,請嘗試下面的代碼
將此代碼放入UserDetails
@ManyToOne
@JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false)
@JoinColumn(name = "name", referencedColumnName = "name", insertable = false, updatable = false)
private USER user;
@Column(name="id")
private int id;
@Column(name="name")
private String name
// don't forget to put getter setter
用戶表:
用戶明細表:
這篇關于如何在Hibernate中定義復合外鍵映射?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,