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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值