单向多对一 查询,添加

映射原理:

  多的一端维护关联关系,在“多”的一端加入一个外键,指向“一”的一端。多的一端持有一的一端的引用,即在“多”的一端加外键,指向“一”的一端。

实例:

多个用户属于同一组,我们从对象模型和关系模型两个角度来分析一下这个例子:

 从上图可以看出,对象模型具有方向性,通过用户(User)可以看到组(Group),但是不能反过来。用户和组各对应一张数据库表,聚合关系需要一个外键(groupid)来表示,最后生成的表如下所示:

作用:

 当我拿到用户时直接就可以拿到用户的组,hibernate在访问多的一端时,可以自动的加载关联对象。对于用户(User)来说,它的关联对象是组(group)。

 

代码:

entity:

User类

 

package com.xia.entity;

public class User {
    private int id;
    private String name;
    private group group;

  public String toString() {
    return "User [id=" + id + ", name=" + name + ", group=" + group.toString() + "]";
   }

//get,set方法
    
}

 

Groud类

package com.xia.entity;

public class group {
    private int id;
    private String name;
    
public String toString() {
   return "group [id=" + id + ", name=" + name + "]";
    }
//get,set方法 }

 

xml:

User.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.xia.entity">
    <class name="User" table="tb_user">
        <id name="id" column="u_id">
            <generator class="native"></generator> 
        </id>
        <property name="name" column="u_name"/>
   <!-- group属性,表达的是本对象与Group的多对一的关系-- <many-to-one name="group" class="group" column="g_id"></many-to-one> </class> </hibernate-mapping>

Group.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.xia.entity">
    <class name="group" table="t_group">
        <id name="id" column="g_id">
            <generator class="native"></generator>  
        </id>
        <property name="name" column="g_name"/>
    </class>
</hibernate-mapping>

 

将两个配置文件映射到sessionFactory中:

 

<property name="mappingResources">
            <list>
                <value>com/xia/entity/group.hbm.xml</value>
                <value>com/xia/entity/User.hbm.xml</value>
                
            </list>
        </property>

 

 

Test:自动建表及添加数据

 

package com.xia.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xia.entity.User;
import com.xia.entity.group;

public class test {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("springContext.xml");
        SessionFactory s = ac.getBean("sessionFactory",SessionFactory.class);
        User u = new User();
        u.setName("张三");
        group g = new group();
        g.setName("员工");
        u.setGroup(g);
        Session session = s.openSession();
        session.beginTransaction();
        session.save(g);
        session.save(u);
        session.getTransaction().commit();
        session.close();
    }
}

 

查询:

 

package com.xia.test;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xia.entity.User;

public class test {
    public static void main(String[] args) {
        ApplicationContext ac = new ClassPathXmlApplicationContext("springContext.xml");
        SessionFactory s = ac.getBean("sessionFactory",SessionFactory.class);
        Session session = s.openSession();
        Query query = session.createQuery("from User");
        List<User> list = query.list();
        for(User u:list){
            System.out.println(u.toString());
        }
    }
}

 

输出结果:

 

User [id=0, name=张三, group=group [id=1, name=员工]]

 

posted @ 2016-09-26 17:47  夏文杰  阅读(173)  评论(0)    收藏  举报