`
KuangYeYaZi
  • 浏览: 52684 次
文章分类
社区版块
存档分类
最新评论

Hibernate映射一对多关系(重点)

 
阅读更多

Hibernate映射一对多关系

  Customer.java

  package org.model;

  import java.util.Set;

  public class Customer {

  private int c_id;//主键

  private String c_name;

  private Set orders;//一对多关系,然后持有Set集合

  public int getC_id() {

  return c_id;

  }

  public String getC_name() {

  return c_name;

  }

  public Set getOrders() {

  return orders;

  }

  public void setC_id(int c_id) {

  this.c_id = c_id;

  }

  public void setC_name(String c_name) {

  this.c_name = c_name;

  }

  public void setOrders(Set orders) {

  this.orders = orders;

  }

  }

  Order.java

  package org.model;

  public class Order {

  private Customer customer;//一个订单对一个顾客

  private int o_id;

  private String o_number;

  public Customer getCustomer() {

  return customer;

  }

  public int getO_id() {

  return o_id;

  }

  public String getO_number() {

  return o_number;

  }

  public void setCustomer(Customer customer) {

  this.customer = customer;

  }

  public void setO_id(int o_id) {

  this.o_id = o_id;

  }

  public void setO_number(String o_number) {

  this.o_number = o_number;

  }

  }

  类写好,下一步是配置文件

  Customer.hbm.xml【一对多关联】

  <?xml version="1.0"?>

  <!DOCTYPE hibernate-mapping PUBLIC

  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

  "hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

  <hibernate-mapping>

  <class name="org.model.Customer" table="customer">

  <id name="c_id" column="u_id" >

  <generator class="increment"></generator>

  </id>

  <property name="c_name" type="string"  >

  <column name="u_name" length="15"/>

  </property>

  <set name="orders" cascade="all" inverse="true" lazy="false">

  <key column="customer_id"></key>

  <one-to-many class="org.model.Order" /><!-- set元素类型order类型得 -->

  </set>

  </class>

  </hibernate-mapping>

主键生成策略是自增increment

  <set>元素表明orders这个属性是Set类型 cascade是级联属性 默认值为none,类似数据库中的级联操作 lazy指的是是否延迟检索

  key子元素表明通过外键customer_id参照customer表

  one to many 命名存储的是一组Order对象

  Order.hbm.xml【多对一关联】

  <?xml version="1.0"?>

  <!DOCTYPE hibernate-mapping PUBLIC

  "-//Hibernate/Hibernate Mapping DTD 3.0//EN"

  "hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

  <hibernate-mapping>

  <class name="org.model.Order" table="order1">

  <id name="o_id" column="o_id" >

  <generator class="increment"></generator>

  </id>

  <property name="o_number" type="string"  >

  <column name="o_number" length="15"></column>

  </property>

  <many-to-one name="customer" class="org.model.Customer" column="customer_id"></many-to-one>

  </class>

  </hibernate-mapping>

  可能我们会以为应该这么配置<property name="customer" column="customer_id">

  解释:显然这个是错的,customer是一个类类型,而customer_id是一个整型,这当然是不匹配的,要使用<many-to-one>多对一

  name:属性名  class:类名  not-null 如果为true 表示customer属性不允许为null---对应数据库就是加一个not null约束 还会影响运行时行为 是null么?有检验机制

  Exception in thread "main" org.hibernate.PropertyValueException: not-null property references a null or transient value: org.model.Order.customer

  【爆出这个异常】

  hibernate帮我们产生的建立表的sql语句如下:

  create table customer (u_id integer not null, u_name varchar(15), primary key (u_id))

  create table order1 (o_id integer not null, o_number varchar(15), customer_id integer, primary key (o_id))

  alter table order1 add index FKC3DF62A3D5851A89 (customer_id), add constraint FKC3DF62A3D5851A89 foreign key (customer_id) references customer (u_id)

 

 

来源http://itlab.idcquan.com/Java/Hibernate/963857.html

分享到:
评论

相关推荐

    Hibernate3.1_学习源码

    案例目录: 01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了Hibernate进行持久化的一些过程,因为是Hibernate的入门实例,所以注释很详细,其中有... 一对一、多对一、一对多、多对多等几种情况。

    精通hibernate:对象持久化技术孙卫琴第二版part2

    7.3 映射一对多双向自身关联关系 165 7.4 改进持久化类 171 7.5 小结 175 7.6 思考题 176 第8章 通过Hibernate操纵对象(上) 179 本章站在持久化层的角度,Java对象在生命周期中可处于临时状态、持久化状态、...

    深入浅出Hibernate(PDF)第二部分

    直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...

    精通Hibernate:对象持久化技术第二版part3

    7.3 映射一对多双向自身关联关系 165 7.4 改进持久化类 171 7.5 小结 175 7.6 思考题 176 第8章 通过Hibernate操纵对象(上) 179 本章站在持久化层的角度,Java对象在生命周期中可处于临时状态、持久化状态、...

    Hibernate4入门基础学习视频课程

    Hibernate原理的模拟,重点讲思路,代码不全部实现,Hibernate的基本配置 Hibernate核心接口介绍,对象的三种状态,Hibernate关系映射:一对一、 一对多 、 多对多。 Hibernate查询(HQL语句的使用)。

    NHibernate中文文档

    双向的一对多关系(Bidirectional one-to-many) 17 级联生命周期(Cascading lifecycle) 18 级联更新(Using cascading update()) 19 结论 19 第8章 NHibernate缓存(NHibernate.Caches) 19 什么是 NHibernate....

    SSH框架与AJAX技术的Java_Web应用开发(4页,pdf书籍)不是代码

    涵盖更多内容,列举了大量典型实例具有超强的实用性,另外,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》各篇独立,适合读者全面学习或对部分内容重点学习。 读者对象 有Java基础,想进一步...

    java web技术开发大全(最全最新)

    涵盖更多内容,列举了大量典型实例具有超强的实用性,另外,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》各篇独立,适合读者全面学习或对部分内容重点学习。 读者对象 有Java基础,想进一步...

    mybatis学习笔记

    5.6.3 一对多延迟加载 59 5.6.4 延迟加载小结 59 6 查询缓存 59 6.1 mybatis缓存介绍 59 6.2 一级缓存 60 6.2.1 原理 60 6.2.2 测试1 61 6.2.3 测试2 61 6.3 二级缓存 62 6.3.1 原理 62 6.3.2 开启二级缓存: 62 ...

    基于JSP的儿童健康保健系统毕业设计论文

    本系统还使用了Hibernate 技术,Hibernate 是目前最流行的开源对象关系映射(ORM)架构,对数据库完全使用面向对象的方式进行操作。本系统的功能为角色进行了权限的分配,普通用户提供的功能包括:注册、修改信息、...

    java web开发技术大全

    涵盖更多内容,列举了大量典型实例具有超强的实用性,另外,《Java Web开发技术大全:JSP+Servlet+Struts+Hibernate+Spring+Ajax》各篇独立,适合读者全面学习或对部分内容重点学习。 读者对象 有Java基础,想...

    java面试题

    答:Servlet与CGI的区别在于Servlet处于服务器进程中,它通过多线程方式允许其service方法,一个实例可以服务于多个请求,并且其实例一般不会被销毁,而CGI对每个请求都产生新的进程,服务完后就销毁,所以效率上...

    健身房管理信息系统设计.doc

    1所示: 图 1-1 Struts工作原理 1.2.2 Hibernate Hibernate[2]是目前最流行的ORM(Object/Relational Mapper),是连接Java对象模型和关系数据库模型的桥梁,它对JDBC进行了轻量级封装 不仅提供ORM映射服务,还提供...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    由于客户端的硬件配置可能存在差异,软件环能各不相同,因此,在安装时,必须对每一个客户端分别进行配置,同样,在软件升级时也要对客户端分别处理。 B/S模式带来了巨大的好处: 开发成本及维护成本降低。由于B/S...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    10.1.1 对象/关系数据库映射(ORM) 365 10.1.2 JPA的映射规则 367 10.1.3 JPA规范简介 368 10.2 实体入门 368 10.2.1 开发实体 369 10.2.2 在Java SE环境下使用 Hibernate JPA实现 370 10.2.3 在Java SE环境下使用 ...

    springmybatis

    无论是用过的hibernate,mybatis,你都可以法相他们有一个共同点: 1. 从配置文件(通常是XML配置文件中)得到 sessionfactory. 2. 由sessionfactory 产生 session 3. 在session 中完成对数据的增删改查和事务提交等. 4....

    Spring.3.x企业应用开发实战(完整版).part2

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

    Spring3.x企业应用开发实战(完整版) part1

    Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。  Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...

Global site tag (gtag.js) - Google Analytics