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? ,也采用的复合主键,相关的代码可以查看附件看看,希望对大家提供帮助
?