Hibernate HelloWorld-06 单向多对一的映射关系
来源:互联网 发布:淘宝上找不到的衣服 编辑:程序博客网 时间:2024/05/21 17:30
一、单向多对一的映射关系
二、项目文件1、多个订单对应一个customer
2、customer : 1
3、order:多
4、方向:多个order对应一个customer
5、只需要在订单表里面引用客户id即可,而不是在客户订单里面引用oder集合,实际在表中的关系是:order表里面有一个外键,这个外键是customer表的customerid
1、order.java
package com.weixuan.hibernate;/* * 单项多对一的关系 * 多个订单对应一个客户 * 那么只需要在订单表里面引用客户id即可,而不是在客户订单里面引用oder集合 * 实际在表中的关系是:order表里面有一个外键,这个外键是customer表的customerid */public class Order {private Integer OrderId;private String OrderName;private Customer customer;public Integer getOrderId() {return OrderId;}public void setOrderId(Integer orderId) {OrderId = orderId;}public String getOrderName() {return OrderName;}public void setOrderName(String orderName) {OrderName = orderName;}public Customer getCustomer() {return customer;}public void setCustomer(Customer customer) {this.customer = customer;}@Overridepublic String toString() {return "Order [OrderId=" + OrderId + ", OrderName=" + OrderName+ ", customer=" + customer + "]";}}2、customer.java
package com.weixuan.hibernate;public class Customer {private Integer CustomerID;private String CustomerName;public Integer getCustomerID() {return CustomerID;}public void setCustomerID(Integer customerID) {CustomerID = customerID;}public String getCustomerName() {return CustomerName;}public void setCustomerName(String customerName) {CustomerName = customerName;}@Overridepublic String toString() {return "Customer [CustomerID=" + CustomerID + ", CustomerName="+ CustomerName + "]";}}3、order.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"><!-- Generated 2015-6-1 19:18:30 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping package="com.weixuan.hibernate"><class name="com.weixuan.hibernate.Order" table="ORDERS"><id name="OrderId" type="java.lang.Integer"><column name="ORDER_ID" /><generator class="native" /></id><property name="OrderName" type="java.lang.String"><column name="ORDER_NAME" /></property><!-- 手工配置 映射多对一的映射关系 --><!-- 1、name 多的这一端的属性的名称private Customer customer;2、class 一的那一端对用的类名3、column 一那一端在多这一端对应的数据表中的外键的名字 --><many-to-one name="customer" class="Customer" column="CUSTOMER_ID" ></many-to-one><!-- 系统自动生成的配置 --><!-- <many-to-one name="customer" class="Customer" fetch="join"> <column name="CUSTOMER" /> </many-to-one> --></class></hibernate-mapping>4、customer.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"><!-- Generated 2015-6-1 19:18:30 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping package="com.weixuan.hibernate"> <class name="Customer" table="CUSTOMERS"> <id name="CustomerID" type="java.lang.Integer"> <column name="CUSTOMER_ID" /> <generator class="native" /> </id> <property name="CustomerName" type="java.lang.String"> <column name="CUSTOMER_NAME" /> </property> </class></hibernate-mapping>5、hibernate.cfg.xml
三、CRUD的测试<?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"><hibernate-configuration><session-factory><!-- 数据库方言 --><property name="dialect">org.hibernate.dialect.MySQLDialect</property><property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property><property name="connection.username">root</property><property name="connection.password">root</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="myeclipse.connection.profile">com.mysql.jdbc.Driver</property><!-- 是否在控制台打印sql --><property name="show_sql">true</property><!-- 格式化 --><property name="format_sql">true</property><!-- 指定自动生成数据表的策略 --><property name="hbm2ddl.auto">update</property><mapping resource="com/weixuan/hibernate/Customer.hbm.xml" /><mapping resource="com/weixuan/hibernate/Order.hbm.xml" /></session-factory></hibernate-configuration>
package com.weixuan.hibernate.test;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;import org.hibernate.service.ServiceRegistry;import org.hibernate.service.ServiceRegistryBuilder;import org.junit.After;import org.junit.Before;import org.junit.Test;import com.weixuan.hibernate.Customer;import com.weixuan.hibernate.Order;public class TestHibernateNtoOne {private SessionFactory sessionFactory = null;private Session session = null;private Transaction transaction = null;@Beforepublic void init() {Configuration configuation = new Configuration().configure();ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(configuation.getProperties()).buildServiceRegistry();sessionFactory = configuation.buildSessionFactory(serviceRegistry);session = sessionFactory.openSession();transaction = session.beginTransaction();}@Afterpublic void Destory() {transaction.commit();session.close();sessionFactory.close();}@Testpublic void testManyToOneSave() {Customer customer = new Customer();customer.setCustomerName("AAA");Order order1 = new Order();order1.setOrderName("order1");Order order2 = new Order();order2.setOrderName("order2");// 设定关联关系order1.setCustomer(customer);order2.setCustomer(customer);/** * 1、先插入customer,然后是order是三条insert语句 */// 执行save方法// session.save(customer);// session.save(order1);// session.save(order2);Customer customer1 = new Customer();customer1.setCustomerName("BBB");Order order3 = new Order();order3.setOrderName("order3");Order order4 = new Order();order4.setOrderName("order4");order3.setCustomer(customer1);order4.setCustomer(customer1);/** * 2、先插入order,然后是customer,是两条update语句,三条insert语句 */// 执行save方法session.save(order3);session.save(order4);session.save(customer1);}@Testpublic void testManyToOneGet() {Order order = (Order) session.get(Order.class, 1);System.out.println(order);//此时关闭session,会发生懒加载异常//获取order对象时,默认情况下,关联的customer对象是一个代理对象Customer customer = order.getCustomer();System.out.println(customer);}@Testpublic void testManyToOneUpdate() {Order order = (Order) session.get(Order.class, 1);order.getCustomer().setCustomerName("wangwu");//不能调用update}@Testpublic void testManyToOneDelete() {//不设定级联关系情况下,且1的这一端有N的对象在引用,不能直接删除一的一端的对象Customer c = (Customer) session.get(Customer.class, 1);session.delete(c);}}
0 0
- Hibernate HelloWorld-06 单向多对一的映射关系
- Hibernate HelloWorld-07 双向多对一的映射关系
- Hibernate关联关系映射-----单向多对一映射配置
- Hibernate的单向多对一映射
- Hibernate关系映射(7)_多对一单向关联
- Hibernate 关系映射 —— 单向多对一
- Hibernate进阶之单向多对一关系映射
- HIbernate关系映射--单向多对一@ManyToOne
- hibernate-关系映射(多对一单向关联)-8
- Hibernate中的多对一单向映射关系
- hibernate对象关系映射(一对一,一对多,多对一,多对多的单向,双向映射)
- hibernate对象关系映射( 一对一,一对多,多对一,多对多的单向,双向映射 ——)
- 【HIbernate框架学习】:Hibernate对象关系映射之单向多对一关联映射
- Hibernate关联关系映射(单向一对多、单向多对一、双向一对多)
- hibernate映射总结详解: 映射多对一单向关联关系
- Hibernate多对一单向关联映射
- hibernate:多对一单向关联映射
- Hibernate多对一映射单向关联
- 跟着实例学习ZooKeeper的用法: 缓存
- 一个数组保存了N个结构
- 链表基础知识
- android 滚动与设置接口方法
- centos下安装redis,并且设置自启动脚本
- Hibernate HelloWorld-06 单向多对一的映射关系
- 面试题29:数组中出现次数超过一半的数字
- 算法导论(二)堆排序
- hdu 5246 超级赛亚ACMer
- Virtual Box cannot access the kernel driver
- TCP三次握手和四次挥手过程以及连接为什么使用三次连接,释放使用四次
- 一步一步跟我学习lucene(17)---lucene搜索之expressions表达式处理
- 中国计算机学会推荐国际学术期刊 (计算机图形学与多媒体)
- ASP.NET4.0课后习题答案