一對一
package com.st.bean4;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.GenericGenerator;
@Entity //指定實體類
@Table(name="DEPT") //對應表的名稱
@GenericGenerator(name="genID", strategy="increment") //聲明主鍵生成策略
public class DeptBean2 {
@Id //指定主鍵
@GeneratedValue(generator="genID") //設定主鍵生成策略
@Column(name="ID") //指定類中的屬性與表中的列的對應關係
private long id;
@Column(name="NAME") //指定類中的屬性與表中的列的對應關係
private String name;
@OneToMany //指定一對多關係
@Cascade(value={CascadeType.SAVE_UPDATE}) //設定級聯關係
@JoinColumn(name="dept_id") //指定與本類主鍵所對應的外表的外鍵
private Set<EmployeeBean2> emp = new HashSet<EmployeeBean2>();
@Override
public String toString() {
return "DeptBean [id=" + id + ", name=" + name +"]";
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<EmployeeBean2> getEmp() {
return emp;
}
public void setEmp(Set<EmployeeBean2> emp) {
this.emp = emp;
}
}
//實體類創建
package com.st.bean4;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.GenericGenerator;
@Entity //指定一個實體
@Table(name="employee") //指定表的名稱
@GenericGenerator(name="genID", strategy="increment") //聲明主鍵生成策略
public class EmployeeBean2 {
@Id //指定主鍵
@GeneratedValue(generator="genID") //設定主鍵生成策略
@Column(name="ID") //類中的屬性和表中的列名的對應關係
private long id;
@Column(name="NAME")
private String name;
@Column(name="SEX")
private String sex;
@Column(name="JOB")
private String job;
@ManyToOne// 指定多對一關係 //指定多對一關係
@JoinColumn(name="DEPT_ID")
//一個員工對應於一個部門號,所以這裏不用集合
private DeptBean2 dept ; //注意這個地方不要new對象,否則會無法運行
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
public DeptBean2 getDept() {
return dept;
}
public void setDept(DeptBean2 dept) {
this.dept = dept;
}
@Override
public String toString() {
return "EmployeeBean [id=" + id + ", name=" + name + ", sex=" + sex
+ ", job=" + job + ", dept=" + dept
+ "]";
}
}
//添加配置文件
1 <mapping class="com.st.bean5.UserBean2" />
2 <mapping class="com.st.bean5.RoleBean2" />
//創建測試類
1 @Test
2 public void bean4test1(){
3 Session session = HibernateTools.openSession();
4 Transaction tran = session.beginTransaction();
5 //首先在dept中新增一條數據,再關聯的在employee中新增一條數據
6 //DeptBean2 dept = new DeptBean2();
7 //先讀去dept中的數據,再在讀取的基礎上關聯的在employee中新增一條數據
8 DeptBean2 dept = (DeptBean2) session.get(DeptBean2.class,1L); //1L代表主鍵
9 EmployeeBean2 emp = new EmployeeBean2();
10 //dept.setName("技術部");
11 emp.setName("陳澤俊");
12 emp.setSex("男");
13 emp.setJob("STM32");
14 dept.getEmp().add(emp);
15 session.save(dept);
16 //確認提交事物
17 tran.commit();
18 }
//多對多關係
package com.st.bean5;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.GenericGenerator;
@Entity //實體
@Table(name="T_USER") //表名
@GenericGenerator(name="genID", strategy="increment") //聲明主鍵生成策略
public class UserBean2 {
@Id //指定主鍵
@GeneratedValue(generator="genID") //設定主鍵生成策略
@Column(name="ID") //指定類的屬性和表的字段的對應關係
private long id;
@Column(name="NAME")
private String name;
@Column(name="SEX")
private String sex;
@ManyToMany //指定多對多關係
@Cascade(value={CascadeType.SAVE_UPDATE}) //設置級聯關係
@JoinTable(name="USER_ROLE", //指定第三張表
joinColumns={@JoinColumn(name="USER_ID")}, //本表與中間表的外鍵對應
inverseJoinColumns={@JoinColumn(name="ROLE_ID")}) //另一張表與第三張表的外鍵的對應關係
private Set<RoleBean2> role = new HashSet<RoleBean2>();
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Set<RoleBean2> getRole() {
return role;
}
public void setRole(Set<RoleBean2> role) {
this.role = role;
}
@Override
public String toString() {
return "UserBean [id=" + id + ", name=" + name + ", sex=" + sex
+ ", role=" + role + "]";
}
}
//加載關係映射
1 <mapping class="com.st.bean5.UserBean2" />
2 <mapping class="com.st.bean5.RoleBean2" />
//添加測試類
@Test
public void bean5test1(){
// 獲取一個會話
Session session = HibernateTools.openSession();
//開啓一次事物
Transaction tran = session.beginTransaction();
UserBean2 user = new UserBean2();
// RoleBean2 role = (RoleBean2) session.get(RoleBean2.class,1L);
RoleBean2 role = new RoleBean2();
user.setName("蒼姐姐");
user.setSex("女");
role.setPost("博士");
role.setPay(10000);
role.getUser().add(user);
session.save(role);
//確認提交事物
tran.commit();
}
@Test
public void bean5test2(){
// 獲取一個會話
Session session = HibernateTools.openSession();
/* List<UserBean> list = session.createCriteria(UserBean.class).list();
for(UserBean user : list)
System.out.println(user);*/
String hql = "select new Map(u.name as name,u.sex as sex,r.post as post,r.pay as pay) from UserBean2 u join u.role r";
List<Map<String,Object>> list = session.createQuery(hql).list();
for(Map<String,Object> data : list)
System.out.println(data);
}