zoukankan      html  css  js  c++  java
  • Hibernate 、多表关联映射-多对一关系(many-to-one)


    Hibernate.cfg.xml:

        <session-factory name="sessionFactory">
        	<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        	<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        	<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/spring?useUnicode=true&characterEncoding=UTF-8</property>
        	<property name="hibernate.connection.username">root</property>
        	<property name="hibernate.connection.password"></property>
        	<property name="hibernate.show_sql">true</property>
        	<property name="hibernate.format_sql">true</property>
        	<property name="hibernate.hbm2ddl.auto">update</property>
    
        	<mapping resource="cn/hbm/Person.hbm.xml"/>
        	<mapping resource="cn/hbm/Department.hbm.xml"/>
        </session-factory>


    Person:

    public class Person {
    
    	private Integer id;
    	private String name;
    	private Department dept;
    	public Integer getId() {
    		return id;
    	}
    	public void setId(Integer id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	public Department getDept() {
    		return dept;
    	}
    	public void setDept(Department dept) {
    		this.dept = dept;
    	}
    	
    	
    }


    Department:

    public class Department {
    
    	private Integer id;
    	private String name;
    	public Integer getId() {
    		return id;
    	}
    	public void setId(Integer id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	
    	
    }
    


    department.hbm.xml:

    <hibernate-mapping package="cn.model">
    	<class name="Department" table="DEPARTMENT" lazy="true">
    		<id name="id" column="ID">
    			<generator class="native"></generator>
    		</id>
    		<property name="name" column="NAME" type="java.lang.String" />
    		<property name="address" column="ADDRESS" type="java.lang.String" />
    	</class>
    </hibernate-mapping>
    


    Person.hbm.xml:


    <hibernate-mapping package="cn.model">
    	<class name="Person" table="PERSON" lazy="true">
    		<id name="id" column="ID">
    			<generator class="native"></generator>
    		</id>
    		<property name="name" column="NAME" type="java.lang.String" />
    		<many-to-one name="dept"  column="DEPT_ID" />
    	</class>
    </hibernate-mapping>


    使用many-to-one 将Person与Department的实体应射关联起来 DEPT_ID 是Department在Person表中的一个外键,Hibernate会根据Person实体中的dept然后找到对应的实体Department 然后再取得Department 的映射关系;

    public void save(){
    		Session session=null;
    		Transaction tran=null;
    		try{
    			Department dept=new Department();
    			dept.setName("IT开发部");
    			Person person=new Person();
    			person.setName("汤姆");
    			person.setDept(dept);
    			session=HibernateSessionFactory.getSession();
    			tran=session.beginTransaction();
    			session.save(dept);
    			session.save(person);
    			tran.commit();
    		}catch(Exception e){
    			if(session!=null){
    				session.close();
    			}
    		}
    	}
    	
    	public List<Person> getByName(String name){
    		Session session=null;
    		try{
    			session=HibernateSessionFactory.getSession();
    			String hql=" from Person where name=:name";
    			Query query=session.createQuery(hql);
    			query.setString("name", name);
    			return query.list();
    		}catch(Exception e){
    			if(session!=null){
    				session.close();
    			}
    		}
    		return null;
    	}
    	


    结果,将取得Person的时候,访问Person的部门属性,会将部门信息关联查询出来:



  • 相关阅读:
    2018-8-10-如何写毕业论文-表格
    2018-8-10-win10-uwp-自定义控件初始化
    2018-8-10-win10-uwp-自定义控件初始化
    hashMap的hashCode() 和equal()的使用
    java中fail-fast 和 fail-safe的区别
    java各种集合的线程安全
    Java集合框架总结—超详细-适合面试
    CodeForces 1058C C. Vasya and Golden Ticket
    CodeForces 1058C C. Vasya and Golden Ticket
    CodeForces-1058B B. Vasya and Cornfield
  • 原文地址:https://www.cnblogs.com/raphael5200/p/5114759.html
Copyright © 2011-2022 走看看