Hibernate复合主键映射
来源:互联网 发布:软件 win7 开机启动 编辑:程序博客网 时间:2024/05/16 17:08
Hibernate中除了使用<generator>来生成主键之外,还可以根据具体的需求让持久化类的标识符属性映射成数据库的符合主键。
通常做法是将主键相关字段放到一个单独的类中,这样的类是由要求的:必须实现序列化接口;覆盖equals和hashcode方法。
下面是具体的代码实现:
ExportDB.java文件:
package com.lsh.hibernate;import org.hibernate.cfg.Configuration;import org.hibernate.tool.hbm2ddl.SchemaExport;/** * 将hbm生成ddl * @author lsh * */public class ExportDB {public static void main(String[] args) {//默认读写hibernate.cfg.xml文件Configuration cfg = new Configuration().configure(); SchemaExport export = new SchemaExport(cfg);export.create(true, true);}}FiscalYearPeriod.java文件:
package com.lsh.hibernate;import java.util.Date; /** * 核算期间 * @author wangy * */public class FiscalYearPeriod {private FiscalYearPeriodPK fiscalYearPeriodPK;//开始日期private Date beginDate;//结束日期private Date endDate;//状态private String periodSts;public Date getBeginDate() {return beginDate;}public void setBeginDate(Date beginDate) {this.beginDate = beginDate;}public Date getEndDate() {return endDate;}public void setEndDate(Date endDate) {this.endDate = endDate;}public String getPeriodSts() {return periodSts;}public void setPeriodSts(String periodSts) {this.periodSts = periodSts;}public FiscalYearPeriodPK getFiscalYearPeriodPK() {return fiscalYearPeriodPK;}public void setFiscalYearPeriodPK(FiscalYearPeriodPK fiscalYearPeriodPK) {this.fiscalYearPeriodPK = fiscalYearPeriodPK;}}FiscalYearPeriodPK.java文件:
package com.lsh.hibernate;import java.io.Serializable;public class FiscalYearPeriodPK implements Serializable {//核算年private int fiscalYear;//核算月private int fiscalPeriod;public int getFiscalYear() {return fiscalYear;}@Overridepublic int hashCode() {final int prime = 31;int result = 1;result = prime * result + fiscalPeriod;result = prime * result + fiscalYear;return result;}@Overridepublic boolean equals(Object obj) {if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;FiscalYearPeriodPK other = (FiscalYearPeriodPK) obj;if (fiscalPeriod != other.fiscalPeriod)return false;if (fiscalYear != other.fiscalYear)return false;return true;}public void setFiscalYear(int fiscalYear) {this.fiscalYear = fiscalYear;}public int getFiscalPeriod() {return fiscalPeriod;}public void setFiscalPeriod(int fiscalPeriod) {this.fiscalPeriod = fiscalPeriod;}}FiscalYearPeriod.hbm.xml文件:
<hibernate-mapping package="com.lsh.hibernate"><class name="FiscalYearPeriod" table="t_fiscalyearperiod"> <composite-id name="fiscalYearPeriodPK"> <key-property name="fiscalPeriod"/> <key-property name="fiscalYear"/> </composite-id> <property name="beginDate"/> <property name="endDate"/> <property name="periodSts"/></class></hibernate-mapping>在实际项目中能尽可能减少复合主键也是有必要的,因为复合主键使用的是自然属性作为码,一旦自然属性需要修改,那么修改主键是非常麻烦的一件事情,所以使用代理主键作为数据库的主键策略是最好的。
0 0
- hibernate复合主键映射
- Hibernate复合主键映射
- Hibernate复合主键映射
- Hibernate复合主键映射
- Hibernate复合主键映射
- Hibernate复合主键映射
- Hibernate复合主键映射
- Hibernate复合主键映射
- Hibernate复合主键映射
- hibernate 复合主键映射
- Hibernate复合主键映射
- Hibernate复合主键映射
- Hibernate复合主键映射
- hibernate复合主键映射
- Hibernate复合主键映射
- 【Hibernate】复合主键映射
- Hibernate复合主键映射
- hibernate复合主键映射
- 免费自学Cocos2d-x3.0final2014原创视频教程(56集)(适用于Cocos2d-x3.1 Cocos2d-x3.2版本全)
- Binary Tree Paths
- SQL Server2012 元数据管理器中存在错误
- [笔记] 大家一起来测试,benchmark起来(MySQL下的TPC-C,TPC-H,TPC-W)
- HDOJ 4456 Crowd 离散化+二维树状数组
- Hibernate复合主键映射
- POJ3260--The Fewest Coins(混合背包)
- 控件
- 关于Android4.0之后主线程无法访问网络的解决方案
- 一个聊天界面
- c++の文件读写
- 数组的引用于引用数组
- JavaSE增强之反射
- 台湾国立大学机器学习基石.听课笔记(第十六讲二):Three Learning Principle