hibernate复合主键配置和使用



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

 



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

 <composite-id name="id" class="com.targ.adaptoflow.formdesign.form.domain.FormId">
        	<key-property name="formId" 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;
	}
	
	
	@Override
	public 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;
		}
	}
	
	@Override
	public 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语句应该这样写:

写道
String hql =" from Form fm where fm.id.formId = '"+formId+"'";

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值