Hibernate 注解一对多,多对一
接着导入—>注解所需要的包 ejb3-persistence.jar、hibernate-annotations.jar、hibernate-commons-annotations.jar
图示:
部门实体类与注解
package bean;
import java.util.HashSet;
import java.util.Set;
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.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
@Entity
@Table(name="deptNew")
public class Dept {
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_dept")
@SequenceGenerator(name="seq_dept",sequenceName="seq_dept",initialValue=1,allocationSize=1)
private Integer id;
@Column
private String deptName;
//添加关系
@OneToMany
@Cascade(CascadeType.SAVE_UPDATE)
@JoinColumn(name="deptid")
private Set<Emp> emps=new HashSet<Emp>();
public Set<Emp> getEmps() {
return emps;
}
public void setEmps(Set<Emp> emps) {
this.emps = emps;
}
/*
* 构造方法
* */
public Dept() {
}
public Dept(String deptName) {
super();
this.deptName = deptName;
}
/*
* 封装方法
* */
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDeptName() {
return deptName;
}
public void setDeptName(String deptName) {
this.deptName = deptName;
}
}
员工实体类与注解
package bean;
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.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name="empNew")
public class Emp {
//员工编号
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="emp_generator")
@SequenceGenerator(name="emp_generator",sequenceName="seq_emp",initialValue=1,allocationSize=1)
private Integer empNo;
//员工姓名
@Column
private String empName;
@ManyToOne()
@JoinColumn(name="deptid")
private Dept dept;
public Dept getDept() {
return dept;
}
public void setDept(Dept dept) {
this.dept = dept;
}
/*
* 构造方法
* */
public Emp() {
}
public Emp(String empName) {
super();
this.empName = empName;
}
/*
* 封装方法
* */
public Integer getEmpNo() {
return empNo;
}
public void setEmpNo(Integer empNo) {
this.empNo = empNo;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
}
hibernate.cfg.xml 的映射是实体类
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>
<session-factory>
<!-- 数据库URL -->
<property name="connection.url">
jdbc:oracle:thin:@localhost:1521:oracle11
</property>
<!-- 数据库用户 -->
<property name="connection.username">A_hr</property>
<!-- 数据库用户密码 -->
<property name="connection.password">123456</property>
<!-- 数据库 JDBC 驱动 -->
<property name="connection.driver_class">
oracle.jdbc.driver.OracleDriver
</property>
<!-- 是否将运行期生成的 SQL 输出到日志以供调试 -->
<property name="show_sql">true</property>
<!-- 每个数据库都有其对应的 Dialect 以匹配其平台特征 -->
<property name="dialect">
org.hibernate.dialect.OracleDialect
</property>
<property name="hbm2ddl.auto">create</property>
<mapping class="bean.Emp" />
<mapping class="bean.Dept" />
</session-factory>
</hibernate-configuration>
进行数据操作
package test;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import util.HibernateSessionFactory;
import bean.Dept;
import bean.Emp;
public class TestAnnotation {
public static void main(String[] args) {
//addEmp();
oneToMany();
//manyToOne();
}
private static void oneToMany() {
Emp emp=new Emp("李四");
Dept dept=new Dept("财务部");
dept.getEmps().add(emp);
Session session=HibernateSessionFactory.getSession();
Transaction tx=null;
try {
tx=session.beginTransaction();
session.save(dept);
tx.commit();//隐式调用刷新方法
System.out.println("保存成功");
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateSessionFactory.closeSession();
}
}
private static void manyToOne() {
Emp emp=new Emp("李四");
Dept dept=new Dept("财务部");
emp.setDept(dept);
Session session=HibernateSessionFactory.getSession();
Transaction tx=null;
try {
tx=session.beginTransaction();
session.save(emp);
session.save(dept);
tx.commit();//隐式调用刷新方法
System.out.println("保存成功");
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateSessionFactory.closeSession();
}
}
private static void addEmp() {
Emp emp=new Emp("张三");
Session session=HibernateSessionFactory.getSession();
Transaction tx=null;
try {
tx=session.beginTransaction();
session.save(emp);
tx.commit();//隐式调用刷新方法
System.out.println("保存成功");
} catch (HibernateException e) {
e.printStackTrace();
tx.rollback();
}finally{
HibernateSessionFactory.closeSession();
}
}
}
效果图:
查询数据的语句
select id, deptname from deptnew;
select empno, empname, deptid from empnew