hibernate3学习笔记(十七)|关系映射:多对一
来源:互联网 发布:淘宝买到二手货怎么办 编辑:程序博客网 时间:2024/05/21 22:30
数据表设计如下图:
DDL文件:
- CREATE TABLE user (
- id INT(11) NOT NULL auto_increment PRIMARY KEY,
- name VARCHAR(100) NOT NULL default '',
- room_id INT(11)
- );
- CREATE TABLE room (
- id INT(11) NOT NULL auto_increment PRIMARY KEY,
- address VARCHAR(100) NOT NULL default ''
- );
Room.java
- package com.hb3.pack_16.model;
- public class Room {
- private Integer id;
- private String address;
- public Room() {
- }
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- }
User.java
- package com.hb3.pack_16.model;
- public class User {
- private Integer id;
- private String name;
- private Room room;
- public User() {
- }
- 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 Room getRoom() {
- return room;
- }
- public void setRoom(Room room) {
- this.room = room;
- }
- }
Room.hbm.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE hibernate-mapping
- PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="com.hb3.pack_16.model.Room" table="room">
- <id name="id" column="id">
- <generator class="native"/>
- </id>
- <property name="address"
- column="address"
- type="java.lang.String"/>
- </class>
- </hibernate-mapping>
User.hbm.xml:
- <?xml version="1.0" encoding="utf-8"?>
- <!DOCTYPE hibernate-mapping
- PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <hibernate-mapping>
- <class name="com.hb3.pack_16.model.User" table="user">
- <id name="id" column="id" type="java.lang.Integer">
- <generator class="native"/>
- </id>
- <property name="name" column="name" type="java.lang.String"/>
- <many-to-one name="room"
- column="room_id"
- class="com.hb3.pack_16.model.Room"
- cascade="all"
- outer-join="true"/>
- </class>
- </hibernate-mapping>
测试代码:
- package com.hb3.pack_16;
- import java.io.IOException;
- import java.sql.SQLException;
- import org.hibernate.Session;
- import org.hibernate.SessionFactory;
- import org.hibernate.Transaction;
- import org.hibernate.cfg.Configuration;
- import com.hb3.pack_16.model.Room;
- import com.hb3.pack_16.model.User;
- public class BusinessService {
- public static void main(String[] args) throws IOException, SQLException {
- Configuration config = new Configuration().configure();
- SessionFactory sessionFactory = config.buildSessionFactory();
- Session session = sessionFactory.openSession();
- Room room1 = new Room();
- room1.setAddress("NTU-M8-419");
- Room room2 = new Room();
- room2.setAddress("NTU-G3-302");
- User user1 = new User();
- user1.setName("shenbin");
- user1.setRoom(room1);
- User user2 = new User();
- user2.setName("chenyan");
- user2.setRoom(room1);
- User user3 = new User();
- user3.setName("yangye");
- user3.setRoom(room2);
- Transaction tx = session.beginTransaction();
- session.save(user1);
- session.save(user2);
- session.save(user3);
- tx.commit();
- User user = (User) session.load(User.class, new Integer(1));
- System.out.println(user.getName());
- System.out.println(user.getRoom().getAddress());
- session.close();
- sessionFactory.close();
- }
- }
在<many-to-one>的设定中:
cascade表示操作时的级联关系。表示主控方在进行增删改操作时,被控方是否进行相关操作。
outer-join表示查询时是否使用外连接查询方式。
outer-join为true的时候,生成的查询SQL为:
Hibernate:
select user0_.id as id1_, user0_.name as name0_1_, user0_.room_id as room3_0_1_,
room1_.id as id0_, room1_.address as address1_0_ from user user0_
left outer join room room1_ on user0_.room_id=room1_.id where user0_.id=?
select user0_.id as id0_, user0_.name as name0_0_, user0_.room_id as room3_0_0_
from user user0_ where user0_.id=?
Hibernate:
select room0_.id as id0_, room0_.address as address1_0_
from room room0_ where room0_.id=?
不过最好使用fetch属性来表示,及fetch="join"或者fetch="select"。
- hibernate3学习笔记(十七)|关系映射:多对一
- hibernate3学习笔记(十七)|关系映射:多对一
- hibernate3学习笔记(二十)|关系映射:多对多
- hibernate3学习笔记(二十)|关系映射:多对多
- hibernate3学习笔记(二十)|关系映射:多对多
- hibernate3学习笔记(十八)|关系映射:一对多
- hibernate3学习笔记(十八)|关系映射:一对多
- hibernate3学习笔记(十九)|关系映射:一对一
- hibernate3学习笔记(十九)|关系映射:一对一
- hibernate3.3.2学习笔记 --- 多对一
- Hibernate中多对一映射学习笔记(使用的hibernate3.6版本)
- Hibernate3 关系映射使用说明(一)
- Hibernate3 关系映射使用说明(一)
- hibernate3.3.2学习笔记---映射继承的关系
- JPA学习笔记(7)——映射多对一关联关系
- JPA学习笔记-映射单向多对一的关联关系
- JPA学习笔记(7)——映射多对一关联关系
- JPA学习笔记(7)——映射多对一关联关系
- windows进程间通讯的各种方法
- lucene.net,包括对htm,word,doc,pdf,等等式进行parse解析,取得内容
- 对经太空搭载的“神舟三号口服液”口服液的生产菌株进行了科学鉴定.^&
- error LNK2001: unresolved external symbol __imp__
- [转]offsetParent和parentElement的区别
- hibernate3学习笔记(十七)|关系映射:多对一
- 打造windows下的嵌入式开发工具(3):gmp-4.2.3
- Servlet2.3规范
- 读取操作PDF的Java类库
- 百度新闻搜索参数精解
- IIS运行ASP程序出现Server Application Error的解决办法
- Tools:使用oradim恢复windows上的数据库
- 关于Weblogic GBK/GB2312/UTF-8乱码的问题
- mssql命令行下工具isql参数说明