读书人

hibernate复合主键配备和使用

发布时间: 2012-09-21 15:47:26 作者: rapoo

hibernate复合主键配置和使用



?在使用hibernate时有时会碰到配置复合主键和使用,例如下面表就是使用了一个复合主键的

?


hibernate复合主键配备和使用
?那么在配置hibernate文件时就的使用composite-id来标识是复合主键了其部分代码如下:

 <composite-id name="id" column="formId" type="string" length="40"></key-property>        <key-property name="formVersion" column="formVersion" type="string" length="10"></key-property>        </composite-id>

?

最主要的是这里边使用FormId类来标识了该主键,该类的代码如下(其实该类也就是重写了equals和hasCode方法

public class FormId  implements java.io.Serializable {private String formId;private String formVersion;public FormId() {// TODO Auto-generated constructor stub}public FormId(String formId, String formVersion) {this.formId = formId;this.formVersion = formVersion;}@Overridepublic boolean equals(Object obj) {if(obj == null) return false;if(!(obj instanceof FormId)) return false;FormId that = (FormId) obj;if(that.getFormId().equals(this.getFormId()) && that.getFormVersion().equals(this.getFormVersion())) {return true;} else {return false;}}@Overridepublic int hashCode() {return this.getFormId() == null ? 0 : this.getFormId().hashCode() * 37 + this.getFormVersion() == null ? 0 : this.getFormVersion().hashCode() * 37;}public String getFormId() {return formId;}public void setFormId(String formId) {this.formId = formId;}public String getFormVersion() {return formVersion;}public void setFormVersion(String formVersion) {this.formVersion = formVersion;}}

?):

其他的配置还和以前的规则一样了。

?

现在就要谈它的应用了,有时候在程序中需要用到复合主键里边的一个字段进行判断那么hql如何下了,我们现在假设需要用到复合主键里的formId进行判断,那么hql语句应该这样写:

?可以看到在hql可以通过fm.id.formId来访问数据库formId字段

?

?

List<FormVO> formList =  formDao.getListByHql("select new com.targ.adaptoflow.formdesign.form.vo.FormVO(fm.id , fm.formName ,fm.isCurVersion) from  Form as fm where fm.formModelId = '"+formModelId+"' group by fm.id , fm.formName ,fm.isCurVersion  order by isCurVersion desc ");

?上面里的group by fm.id? ,也采用的复合主键,相关的代码可以查看附件看看,希望对大家提供帮助

?

读书人网 >软件架构设计

热点推荐