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>
如图:
很气,强迫症。。。用默认编辑器写的代码图文混杂了,然后重写几次还是这样,又换了这个编辑器写一次!!!
还没有评论,来说两句吧...