hibernate复合主键的使用方法
2010-07-25 15:55
435 查看
在hibernate中操作存在复合主键的数据库表记录时会有一点麻烦,需要在实体类中继承Serializable,重写它的equals(Object obj)和hasCode()方法。具体实现方法如下:
以BrwInfo(读者借阅信息表)为例,复合主键是BookId,ReaderId,对应的hibernate映射文件如下:
与之对应的实体类,注意要重写equals(Object obj)和hasCode()方法。
下面就可以在数据层实现对这个表的GRUD操作了,示例如下。
以BrwInfo(读者借阅信息表)为例,复合主键是BookId,ReaderId,对应的hibernate映射文件如下:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.library.beans.BrwInfo" table="BrwInfo" schema="dbo" catalog="Library"> <composite-id> <key-property name="bookId" type="java.lang.String"> <column name="BookId" /> </key-property> <key-property name="readerId" type="java.lang.String"> <column name="ReaderId" /> </key-property> </composite-id> //此处定义复合主键BookId,ReaderId <property name="bookName" type="java.lang.String"> <column name="BookName" not-null="true" /> </property> <property name="readerName" type="java.lang.String"> <column name="ReaderName" not-null="true" /> </property> <property name="brwDate" type="java.lang.String"> <column name="BrwDate" not-null="true" /> </property> </class> </hibernate-mapping>
与之对应的实体类,注意要重写equals(Object obj)和hasCode()方法。
/** * 2010-6-13 * BrwInfo.java * author:Xiangzi * 读者借阅信息实体类 */ package com.library.beans; import java.io.Serializable; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; public class BrwInfo implements Serializable{ private String BookId; private String ReaderId; private String BookName; private String ReaderName; private String BrwDate; public String getBookName() { return BookName; } public void setBookName(String bookName) { BookName = bookName; } public String getReaderName() { return ReaderName; } public void setReaderName(String readerName) { ReaderName = readerName; } public String getBookId() { return BookId; } public void setBookId(String bookId) { BookId = bookId; } public String getReaderId() { return ReaderId; } public void setReaderId(String readerId) { ReaderId = readerId; } public String getBrwDate() { return BrwDate; } public void setBrwDate(String brwDate) { BrwDate = brwDate; } public boolean equals(Object obj) { if (!(obj instanceof BrwInfo)) { return false; } BrwInfo brw = (BrwInfo) obj; return new EqualsBuilder().appendSuper(super.equals(obj)).append(this.BookId, brw.BookId).append(this.ReaderId, brw.ReaderId).isEquals(); } public int hasCode() { return new HashCodeBuilder(-528253723, -475504089).appendSuper(super.hashCode()).append(this.BookId).append(this.ReaderId).toHashCode(); } }
下面就可以在数据层实现对这个表的GRUD操作了,示例如下。
/* * 删除借阅信息 * @param readerId 读者id * @param bookId 图书id */ public void delete(String readerId, String bookId) { BrwInfo brwInfo=new BrwInfo(); brwInfo.setBookId(bookId); brwInfo.setReaderId(readerId); this.getHibernateTemplate().delete(this.getHibernateTemplate().get(BrwInfo.class,brwInfo)); } /* * 按readerId,bookId查询借阅信息 * @param readerId 读者id * @param bookId 图书id * @return BrwInfo 借阅实体 */ public BrwInfo queryById(String readerId, String bookId) { BrwInfo brwInfo=new BrwInfo(); brwInfo.setBookId(bookId); brwInfo.setReaderId(readerId); return (BrwInfo) this.getHibernateTemplate().get(BrwInfo.class,brwInfo); }
相关文章推荐
- hibernate中复合主键的使用方法
- Hibernate复合主键的使用(转)
- Hibernate中复合主键的配置和使用
- Hibernate复合主键的使用(转)
- Hibernate使用复合主键时需要注意的
- Hibernate中复合主键的配置和使用
- Hibernate 使用复合主键
- Hibernate复合主键的使用
- 关于Hibernate使用组合主键时,组合主键中有些字段为null时的解决方法
- 解决使用Hibernate QBC复合查询含有联合主键映射关系实体的问题
- Hibernate中使用<generator>设置主键生成方式最通用、最高效的方法
- 组合主键在hibernate中的使用方法
- Hibernate复合主键作为外键在关联映射中的配置方法
- hibernate复合主键中为什么要复写equals和hashcode方法?还要implement Serializable?
- Hibernate复合主键中其中有主键是引用外键情况下的配置方法
- hibernate+oracle下使用sequence策略设置主键的方法
- Hibernate注解方法使用主键生成策略@GeneratedValue(三)
- Hibernate 联合/复合主键注解方法
- Hibernate复合主键使用组件方式的hbm.xml配置与集合配置
- 关于Hibernate 复合主键 简单使用