Hibernate一对多(多对一)实例

1.说明

customer和orders是一对多

orderscustomer多对一

orders通过customer_id寻找对应的customer

2. 数据库创建表customer和orders

 

CREATE TABLE [dbo].[customer](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [username] [varchar](20) NULL,
    [balance] [float] NULL
)
 
CREATE TABLE [dbo].[orders](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [orderNumber] [varchar](20) NULL,
    [cost] [float] NULL,
    [customer_id] [int] NULL
)

3.编写POJO(JavaBean)

Customer.java

package com.tang.hibernate;
import java.util.Set;
public class Customer {
	private int id;
	private String username;
	private float balance;
	private Set<Order> orders;
	
	public Set<Order> getOrders() {
		return orders;
	}
	public void setOrders(Set<Order> orders) {
		this.orders = orders;
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public float getBalance() {
		return balance;
	}
	public void setBalance(float balance) {
		this.balance = balance;
	}
	
}
Order.java

package com.tang.hibernate;

public class Order {
	private int id;
	private String orderNumber;
	private float cost;
	private Customer customer;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getOrderNumber() {
		return orderNumber;
	}
	public void setOrderNumber(String orderNumber) {
		this.orderNumber = orderNumber;
	}
	public float getCost() {
		return cost;
	}
	public void setCost(float cost) {
		this.cost = cost;
	}
	public Customer getCustomer() {
		return customer;
	}
	public void setCustomer(Customer customer) {
		this.customer = customer;
	}

}

4.编写配置文件hbm.xml文件

Curtomer.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.tang.hibernate.Customer" table="customer">
            <!-- 主键设置 -->
            <id name="id" type="int">
                <column name="id"></column>
                <generator class="native"></generator>
            </id>
            <!-- 属性设置 -->
            <property name="username" column="username" type="string"></property>
            <property name="balance" column="balance" type="float"></property>
            <!-- 设置一对多的"多"端  -->
            <set name="orders" inverse="true" cascade="all">
                <key column="customer_id" ></key>
                <one-to-many class="com.tang.hibernate.Order"/>
            </set>
            </class>
    </hibernate-mapping>

Order.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.tang.hibernate.Order" table="orders">  
            <id name="id" type="int">  
                <column name="id"></column>  
                <generator class="native"></generator>  
            </id>  
              
            <property name="orderNumber" column="orderNumber" type="string"></property>  
            <property name="cost" column="cost" type="float"></property>  
            <!-- 设置多对一的"一"端 -->
            <many-to-one name="customer" class="com.tang.hibernate.Customer"   
                         column="customer_id" cascade="save-update">  
            </many-to-one>          
        </class>  
    </hibernate-mapping> 

5.设置配置文件cfg.xml

<?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">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

<session-factory>
	<property name="dialect">
		org.hibernate.dialect.SQLServerDialect
	</property>
	<property name="connection.username">sa</property>
	<property name="connection.password">123456</property>
	<property name="connection.driver_class">
		com.microsoft.sqlserver.jdbc.SQLServerDriver
	</property>
	<property name="connection.url">
		jdbc:sqlserver://localhost:1433;Databasename=TestDB
	</property>
	<property name="myeclipse.connection.profile">
		MSSQLDriver2
	</property>
	<!-- <property name="hibernate.show_sql">true</property> -->
	<mapping resource="com/tang/hibernate/Curtomer.hbm.xml" />
	<mapping resource="com/tang/hibernate/Order.hbm.xml" />

</session-factory>

</hibernate-configuration>

6.编写测试代码

TestCustomer.java

package com.tang.hibernate;
import java.util.List;
import java.util.Set;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class TestCustomer {

	public static void main(String[] args) {
		Configuration cfg = new Configuration().configure();
		SessionFactory factory = cfg.buildSessionFactory();
		Session session = factory.openSession();
		session.beginTransaction();
		try{
			new TestCustomer().query(session);
		}catch(Exception e){  
            e.printStackTrace();  
            session.getTransaction().rollback();  
        }finally{  
            if(session != null){  
                if(session.isOpen()){  
                    session.close();  
                }  
            }  
        }  
    }
	
	public void query(Session session) throws Exception{
		Query q = session.createQuery("from Customer");
		List<Customer> list = q.list();
		for(Customer c:list){
			System.out.print(c.getUsername()+"的花费");
			Set<Order> orders = c.getOrders();
			for(Order o:orders){
				System.out.print("==="+o.getCost());
			}
			System.out.println();
		}
	}
}  

 

TestOrder.java

package com.tang.hibernate;
import java.util.List; 
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class TestOrder {
 
	public static void main(String[] args) {
		Configuration cfg = new Configuration().configure();
		SessionFactory factory = cfg.buildSessionFactory();
		Session session = factory.openSession();
		session.beginTransaction();
		try{
			new TestOrder().query(session);
		}catch(Exception e){  
            e.printStackTrace();  
            session.getTransaction().rollback();  
        }finally{  
            if(session != null){  
                if(session.isOpen()){  
                    session.close();  
                }  
            }  
        }  
    }	
	public void query(Session session) throws Exception{
		Query q = session.createQuery("from Order");
		List<Order> list = q.list();
		for(Order c:list){
			System.out.println("--"+c.getCost());
			System.out.println("--"+c.getCustomer().getUsername());
		}
	}
}  

 

源代码目录结构:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值