hibernate:many to one

来源:互联网 发布:电动汽车环保贡献数据 编辑:程序博客网 时间:2024/05/17 21:41

这里就拿练手的图书馆系统来说吧…
这个案例用到其中的表
tb_book 图书信息表
这里写图片描述
tb_bookcase 书架信息表
这里写图片描述
tb_booktype 图书类型表
这里写图片描述
tb_manager 管理员表(录入员)
这里写图片描述


可以看出,tb_book 表中type、bookcase、manager都是多对一的关系(这里只考虑单向)

先罗列下XXX.hbm.xml 中 标签的常用属性
name:映射类属性的名字
column:关联的字段
class:关联类的名字
cascade:设置操作中的级联策略 可选值为 all所有操作情况均进行级联、none所有操作情况均不进行级联、save-update执行save和update操作时级联、delete执行删除操作时级联

lazy:懒加载? 默认true,联表操作时需要设置为false!!!
否则报错调用方法时发生 com.sun.jdi.InvocationException。
查询到的type、bookcase等特殊关系的字段的代理对象类为空。

然后是Book.java的实体类,其他是普通的实体类

public class Book {private int id;private String barcode;private String name;private BookType type;private String author;private String ISBN;private int price;private BookCase bookcase;private Manager manager;private Date intime;private int del;//省略了set、get}

Book.hbm.xml

<property name="ISBN" column="ISBN"></property>        <property name="price" column="price"></property>        //...上面是常规属性...下面是manyt to one          <many-to-one name="bookcase" column="bookcase" class="BookCase" not-null="true" lazy="false"/>        <many-to-one name="type" column="type" class="BookType" not-null="true" lazy="false"/>        <many-to-one name="manager" column="manager" class="Manager" not-null="true" lazy="false"/>

数据层的BookDaoImpl.java,只是简单查询所有Book对象

public class BookDaoImpl extends HibernateDaoSupport implements BookDao{@Overridepublic List<Book> findAll() {// TODO 自动生成的方法存根List<Book> books=getHibernateTemplate().loadAll(Book.class);if (books.size()>0) {//  BookType bookType=books.get(0).getType();//  System.out.println(bookType.getTypename());return books;}return null;}}

省去了从数据层到业务逻辑和action,最后在jsp上遍历

<table border="1"><tr><td>编号</td><td>书名</td><td>类型</td>......</tr>//通过遍历查询到的集合<s:iterator value="books"><tr>//注意取值属性不同<td><s:property value="id"/></td><td><s:property value="name"/></td><td><s:property value="type.typename"/></td>......</tr></s:iterator></table>

如图:

这里写图片描述

很气,强迫症。。。用默认编辑器写的代码图文混杂了,然后重写几次还是这样,又换了这个编辑器写一次!!!

1 0
原创粉丝点击