前言:JPA的多表查詢分爲,一對一,一對多,多對多,這之間又可分爲單向和雙向,本篇文章寫了兩種方式,一對一和多對一(雙向)
數據庫結構人員表(id(主鍵),zhiyeid(職業表的外鍵),name(姓名))。職業表(id(主鍵),gongzuo(職業))
每個人員有一個職業,每個職業有多個人員
1.一對一
人員實體類:
package cn.wiztek.wiztekDemo.entity.userDomain;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
/**
* Description:用戶實體類
* @author sun_jian
* @date 2019年7月19日
*/
@Entity
@Table(name = "test_user")
public class User implements Serializable{
private static final long serialVersionUID = 1280661092304688998L;
/**
* id
*/
private Integer id;
/**
* 職業Id
*/
private Integer zhiyeId;
/**
* 姓名
*/
private String name;
/**
* 職業
* @return
*/
private ZhiYe zhiye;
@Id
@Column(name = "id")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "zhiyeId")
public Integer getZhiyeId() {
return zhiyeId;
}
public void setZhiyeId(Integer zhiyeId) {
this.zhiyeId = zhiyeId;
}
//懶加載
@OneToOne(fetch = FetchType.LAZY)
//第一個參數可隨便寫,第二個參數爲關聯表的id
@JoinColumn(name = "zhiyeId",referencedColumnName="id")
public ZhiYe getZhiye() {
return zhiye;
}
public void setZhiye(ZhiYe zhiye) {
this.zhiye = zhiye;
}
}
職業實體類:
package cn.wiztek.wiztekDemo.entity.userDomain;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.apache.abdera.ext.serializer.annotation.ID;
@Entity
@Table(name = "zhiye")
public class ZhiYe implements Serializable{
private static final long serialVersionUID = -611470410803045277L;
private Integer id;
private String zhiye;
@ID
@Column(name="id")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="zhiye")
public String getZhiye() {
return zhiye;
}
public void setZhiye(String zhiye) {
this.zhiye = zhiye;
}
}
2.多對一
因爲是多對一的關係,所以我們要站在多的角度。因爲一個職業對應多個人員,所以人員是多的一方,所以在人員一方寫註解@ManyToOne
一對多,因爲是一對多所以要在一的一方寫@OneToMany註解。
人員實體類,@JoinColumn(name = "zhiye_id")中name的意思爲 "職業實體類的table名"_"id字段"
package cn.wiztek.wiztekDemo.entity.userDomain;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
/**
* Description:用戶實體類
* @author sun_jian
* @date 2019年7月19日
*/
@Entity
@Table(name = "test_user")
public class User implements Serializable{
private static final long serialVersionUID = 1280661092304688998L;
/**
* id
*/
private Integer id;
/**
* 職業
*/
private ZhiYe zhiye;
/**
* 姓名
*/
private String name;
/**
* 年齡
*/
private Integer age;
/**
* 性別
*/
private String sex;
/**
* 手機號
*/
private String phone;
/**
* 身份證id
*/
private String idNumber;
/**
* 更新時間
*/
private String time;
/**
* 職業
*/
private String occupation;
/**
* 省份
*/
private String provinceDic;
/**
* 地市
*/
private String cityDic;
/**
* 城市
*/
private String city;
/**
* 頭像
*/
private String headPortrait;
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "genUser")
@TableGenerator(name = "genUser", table = "test_user_strategy", pkColumnName = "keyID",
valueColumnName = "keyValue", pkColumnValue = "test_user", allocationSize = 1, initialValue = 1)
@Column(name = "id")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name = "name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "age")
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Column(name = "sex", length = 32)
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Column(name = "phone", length = 32)
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Column(name = "idNumber", length = 32)
public String getIdNumber() {
return idNumber;
}
public void setIdNumber(String idNumber) {
this.idNumber = idNumber;
}
@Column(name = "time")
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
@Column(name = "occupation")
public String getOccupation() {
return occupation;
}
public void setOccupation(String occupation) {
this.occupation = occupation;
}
@Column(name = "provinceDic")
public String getProvinceDic() {
return provinceDic;
}
public void setProvinceDic(String provinceDic) {
this.provinceDic = provinceDic;
}
@Column(name = "cityDic")
public String getCityDic() {
return cityDic;
}
public void setCityDic(String cityDic) {
this.cityDic = cityDic;
}
@Column(name = "city")
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
@Column(name = "headPortrait")
public String getHeadPortrait() {
return headPortrait;
}
public void setHeadPortrait(String headPortrait) {
this.headPortrait = headPortrait;
}
@ManyToOne
@JoinColumn(name = "zhiye_id")
public ZhiYe getZhiye() {
return zhiye;
}
public void setZhiye(ZhiYe zhiye) {
this.zhiye = zhiye;
}
}
3.職業實體類,這其中的mappedBy的值爲職業類的@Table註解中的值
package cn.wiztek.wiztekDemo.entity.userDomain;
import java.io.Serializable;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.apache.abdera.ext.serializer.annotation.ID;
@Entity
@Table(name = "zhiye")
public class ZhiYe implements Serializable{
private static final long serialVersionUID = -611470410803045277L;
private Integer id;
private String gongzuo;
private List<User> users;
@ID
@Column(name="id")
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="gongzuo")
public String getGongzuo() {
return gongzuo;
}
public void setGongzuo(String gongzuo) {
this.gongzuo = gongzuo;
}
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.LAZY,mappedBy="zhiye")
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
}