hibernate:many to one

这里就拿练手的图书馆系统来说吧…
这个案例用到其中的表
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{

@Override
public 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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值