JPA的多表關聯

前言: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;
	}
	
	
}

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章