Hibernate一对多关联双向关联代码实现分享

1、创建实体类(Customer.java、Orders.java)

代码如下:

package wck.stu.vo.oneToMany_single;

import java.util.HashSet;
import java.util.Set;

public class Customer {
    private String id = "";

private String cName = "";

private String bank = "";

private String phone = "";

private Set orders = new HashSet();

public String getId() {
        return id;
    }

public void setId(String id) {
        this.id = id;
    }

public String getcName() {
        return cName;
    }

public void setcName(String cName) {
        this.cName = cName;
    }

public String getBank() {
        return bank;
    }

public void setBank(String bank) {
        this.bank = bank;
    }

public String getPhone() {
        return phone;
    }

public void setPhone(String phone) {
        this.phone = phone;
    }

public Set getOrders() {
        return orders;
    }

public void setOrders(Set orders) {
        this.orders = orders;
    }

}

Customer.java

代码如下:

package wck.stu.vo.oneToMany_single;

public class Orders {
    private String id = "";

private String orderNo = "";

private Double money = 0.0;

private Customer customer;

public String getId() {
        return id;
    }

public void setId(String id) {
        this.id = id;
    }

public String getOrderNo() {
        return orderNo;
    }

public void setOrderNo(String orderNo) {
        this.orderNo = orderNo;
    }

public Double getMoney() {
        return money;
    }

public void setMoney(Double money) {
        this.money = money;
    }

public Customer getCustomer() {
        return customer;
    }

public void setCustomer(Customer customer) {
        this.customer = customer;
    }
}

Orders.java

2、配置文件(Customer.hbm.xml、Orders.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="wck.stu.vo.oneToMany_single.Customer" table="CUSTOMER">
        <id name="id" type="java.lang.String">
            <column name="C_ID" length="32" not-null="true"></column>
            <generator class="uuid.hex"></generator>
        </id>
        <property column="CNAME" name="cName" type="string" length="100"/>
        <property column="BANK" name="bank" type="string" length="100"/>
        <property column="PHONE" name="phone" type="string" length="20"/>
        <!--一对多双向关联映射customer到orders,单的一方配置 -->
        <set cascade="all" inverse="true" lazy="false" name="orders">
            <key column="CUSTOMER_ID" />
            <one-to-many class="wck.stu.vo.oneToMany_single.Orders" />
        </set>
    </class>
</hibernate-mapping>

Customer.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="wck.stu.vo.oneToMany_single.Orders" table="ORDERS">
        <id name="id" type="java.lang.String">
            <column name="C_ID" length="32" not-null="true"></column>
            <generator class="uuid.hex"></generator>
        </id>
        <property column="ORDERNO" name="orderNo" type="java.lang.String" length="17"/>
        <property column="MONEY" name="money" type="java.lang.Double" />
        <many-to-one name="customer" class="wck.stu.vo.oneToMany_single.Customer" column="CUSTOMER_ID" cascade="all" lazy="false" not-null="true"/>
    </class>
</hibernate-mapping>

Orders.hbm.xml

3、测试代码

代码如下:

public String saveCustomerInfo() {
        Customer customer = new Customer();
        customer.setcName("清华大学出版社");
        customer.setBank("9559501012356789");
        customer.setPhone("010-62772015");   
        Orders order = new Orders();
        order.setOrderNo(new Long(System.currentTimeMillis()).toString());
        order.setMoney(new Double(rnd.nextDouble()*10000));
        order.setCustomer(customer);
        customer.getOrders().add(order);
        oneToManyDao.saveCustormerInfo(customer);
        return customer.getId();
    }

(0)

相关推荐

  • 详解hibernate双向多对多关联映射XML与注解版

    双向多对多关联映射原理: 假设,一个员工可能有多个角色,一个角色可能有多个员工,从员工或角色的角度看,这就是多对多的关系,不管从哪一个角度看,都是多对多的联系.多对多关联映射关系一般采用中间表的形式来实现,即新增一种包含关联双方主键的表.实现多对多关联关系,在数据库底层通过添加中间表指定关联关系,而在hibernate框架在双方的实体中添加一个保存对方的集合,在双方的映射文件中使用<set>元素和<many-to-many>元素进行关联关系的配置. 如下图所示: (1)XML版 R

  • 深入解析Java的Hibernate框架中的一对一关联映射

    作为一个ORM框架,hibernate肯定也需要满足我们实现表与表之间进行关联的需要.hibernate在关联方法的实现很简单.下面我们先来看看一对一的做法:  不多说了,我们直接上代码:  两个实体类,TUser和TPassport: public class TUser implements Serializable{ private static final long serialVersionUID = 1L; private int id; private int age; priva

  • Java的Hibernate框架中一对多的单向和双向关联映射

    一.一对多单向关联映射 一对多关系的对象模型在日常生活中也经常看到,就拿学生和班级来说,一个班级里有多个学生,所以班级和学生的关系是一对多的关系,映射到对象模型中,如下图: 对象模型说明了这种一对多的关系是由一的一端来维护的,那么映射成关系模型就是一个班级字段下面会有多个学生,这样就形成了一对多的关系,通过班级能够查询获得学生信息,对应的关系模型如下图: 1.基本配置 有了对象模型接下来就让它们映射为对应的关系代码,在进行关系映射时需要在一的一端添加<one-to-many>标签,另外还需要在

  • java Hibernate 一对多自身关联问题

    Hibernate 一对多自身关联问题 这个很难描述清楚,只能引用CSDN中我提问的帖子了: http://topic.csdn.net/u/20080711/16/7494bf10-48ca-4b2e-8a01-303e647f5516.html 方法,在表单中取得一个PO,然后session.save(po),如下: 程序代码             tx = session.beginTransaction();         session.save(catalog);        

  • hibernate一对多关联映射学习小结

    一对多关联映射  映射原理  一对多关联映射和多对一关联映射的映射原理是一致的,都是在多的一端加入一个外键,指向一的一端.关联关系都是由多端维护,只是在写映射时发生了变化. 多对一和一对多的区别 多对一和一对多的区别在于维护的关系不同: (1)多对一:多端维护一端的关系,在加载多端时,可以将一端加载上来. (2)一对多:一端维护多端的关系,在加载一端时,可以将多端加载上来. 分类 一对多单向关联映射 对象模型 从对象模型中,我们可以看出,Group持有User的一个引用.由于是单向关联,所以数据

  • 举例讲解Java的Hibernate框架中的多对一和一对多映射

    多对一(Many-to-One)映射 多对一(many-to-one)关联是最常见的关联关系,其中一个对象可以与多个对象相关联.例如,一个相同的地址对象可以与多个雇员的对象相关联. 定义RDBMS表: 考虑一个情况,我们需要员工记录存储在EMPLOYEE表,将有以下结构: create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20

  • Hibernate映射解析之关联映射详解

    Hibernate中的关联映射 关联关系 平时开发中,类与类之间最普遍的的关系就是关联关系,而且关联是有方向的. 以部门(Dept)和员工(Employee)为例:一个部门下有多个员工,而一个员工只能属于一个部门. 从Employee到Dept的关联就是 多对一 关联. 这就说明 每个Employee对象只会引用一个Dept对象,因此在Employee类中应该定义一个Dept类型的属性,来引用所关联的Dept对象. 从Dept到Employee的关联就是 一对多 关联.这就说明 每个Dept对象

  • Hibernate一对多关联双向关联代码实现分享

    1.创建实体类(Customer.java.Orders.java) 复制代码 代码如下: package wck.stu.vo.oneToMany_single; import java.util.HashSet;import java.util.Set; public class Customer {    private String id = ""; private String cName = ""; private String bank = "

  • javascript实现的全国省市县无刷新多级关联菜单效果代码

    本文实例讲述了javascript实现的全国省市县无刷新多级关联菜单效果代码.分享给大家供大家参考,具体如下: 运行效果截图如下: 具体代码如下: <html> <head> <title>全国省市县无刷新多级关联菜单</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <style> body,

  • Java的Hibernate框架中的双向主键关联与双向外键关联

    一.双向主键关联 双向的主键关联其实是单向一对一主键关联的一种特殊情况,只不过要在关联对象的两端的映射文件中都要进行<one-to-one>的配置,另外还要在主映射的主键一端采用foreign外键关联属性. 这里同样使用Person和IdCard来讨论,一个人对应着一个唯一的身份证,而且一个身份证也唯一映射着一个人,所以这就产生了双向的关联关系,Person的主键同样也是IdCard的主键,分别是主键的同时也是外键,这种关联关系成为双向一对一映射,表现到关系模型中可如下图: 图中的两个表采用了

  • Hibernate的一对一,一对多/多对一关联保存的实现

    目录 一对一关联保存: 留言表实体类配置:(主表) 留言内容表配置:(从表) 留言表hbm.xml配置:(主表) 留言内容表hbm.xml配置:(从表) 一对多/多对一保存 活动表实体类配置:(主表) 自定义报名要素实体类配置:(从表) 活动表hbm.xml配置:(主表) 报名信息表:(从表) 一对一关联保存: 说明: 留言状态表: 记录用户的留言信息,如留言人openid,留言时间等-(主表) 用户留言内容表: 记录用户的留言内容,id与状态表一对一(从表) 留言表实体类配置:(主表) 添加一

  • JSP开发之hibernate之单向多对一关联的实例

    JSP开发之hibernate之单向多对一关联的实例 一对多的基础上来测试单向多对一的关联 hibernate多对一的关联关系定义: 和单向一对多不同的是:一对多是在意的一方的一方定义set集合,在映射文件中 <set name="" table=""> <key name="" /> <one to many class=" 多的一方的包加类名"/> </set> :单向多对一

  • 使用JPA单项一对多外键关联

    目录 JPA单项一对多外键关联 JPA外键关联保存踩坑 解决 JPA单项一对多外键关联 一对多即一个对象中包含又另外一个对象的集合. User主表代码 @Table(name="USER") @Entity public class User { private Integer id; private String username; private String userpassword; private String useraddress; private List<Ord

  • laravel orm 关联条件查询代码

    如下所示: public function a() { return $this->belongsTo('App\Models\a', 'aid'); } $model = $this->whereHas('a', function ($query) use ($search) { $query->where('username', 'like', '%' . $search['username'] . '%'); })->with(['a:id,username'])->g

随机推荐