单向多对一 查询,添加
映射原理:
多的一端维护关联关系,在“多”的一端加入一个外键,指向“一”的一端。多的一端持有一的一端的引用,即在“多”的一端加外键,指向“一”的一端。
实例:
多个用户属于同一组,我们从对象模型和关系模型两个角度来分析一下这个例子:

从上图可以看出,对象模型具有方向性,通过用户(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=员工]]

浙公网安备 33010602011771号