1. 程式人生 > >@OneToMany,@ManyToOne 中 @mappedby 和@joincolumn 用法和解釋

@OneToMany,@ManyToOne 中 @mappedby 和@joincolumn 用法和解釋

/**
 * 建立了一個實體類。
 * 
 * 如何持久化呢?
 * 
 * 1、使用@Entity進行實體類的持久化操作,當JPA檢測到我們的實體類當中有
 * 
 * @Entity 註解的時候,會在資料庫中生成對應的表結構資訊。
 * 
 * 
 * 如何指定主鍵以及主鍵的生成策略?
 * 
 * 2、使用@Id指定主鍵.
 * 
 * 
 */
@Entity
@Table(name="user")
public class User {
	
	/**
	 * 使用@Id指定主鍵.
	 * 
	 * 使用程式碼@GeneratedValue(strategy=GenerationType.AUTO)
	 * 指定主鍵的生成策略,mysql預設的是自增長。
	 * 
	 */
	@Id @GeneratedValue(strategy=GenerationType.AUTO)
	private int id;//主鍵.
	
	private String name;//姓名
	
	private int age;//年齡
	
	private String remakes;//備註
	
	@ManyToOne
	@JoinColumn(name="role_id", nullable=false)
	private Role role1;//角色
 
	public int getId() {
		return id;
	}
 
	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getRemakes() {
		return remakes;
	}

	public void setRemakes(String remakes) {
		this.remakes = remakes;
	}
 
	
	
	
}

@Entity
@Table(name="role")
public class Role {
	
	@Id
	private int id;
	private String name;
	private String desc;
	
	/*
	 * 主表role 從表 user
	 * mappedBy屬性應該指向從表中維護與主表關係的欄位。
	 * 定義類之間的雙向關係。如果類之間是單向關係,不需要提供定義,
	 * 如果類和類之間形成雙向關係,我們就需要使用這個屬性進行定義,
	 * 否則可能引起資料一致性的問題。該屬性的值是“多”方class裡的“一”方的變數名
	 * 對於Role類來說,mappedBy就應該指向User類中的role1屬性。
	 * @mappedBy註解的作用:在JPA中,在@OneToMany里加入mappedBy屬性可以避免生成一張中間表。
	 */
	
	
	/**
	 * 在‘一’的一方,將關係維護交給多的一方,就像一本書出版後,自己去定義自己的圖書型別,
	 * 然後將自己歸納到相應圖書型別下。
	 * 當級聯操作時,比如某種圖書型別被封殺下架了,圖書館可以選擇銷燬,更新。。這種圖書型別下的圖書,
	 * 也可以讓這些書就放在那不管他了(書沒了型別)
	 */
	@OneToMany(mappedBy="role1")
	private Set<User> users = new HashSet<User>();

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getDesc() {
		return desc;
	}

	public void setDesc(String desc) {
		this.desc = desc;
	}

	public Set<User> getUsers() {
		return users;
	}

	public void setUsers(Set<User> users) {
		this.users = users;
	}
	
	

}