Hibernate @Formula注解

在使用Hibernate时经常会遇到实体类某个字段存的是code值而非我们最终想要的中文具体显示的值,如果使用Hibernate的一对一关联这种,一个属性还好说,但是如果一个实体类里有多个字段都是需要转换数据字段的,就麻烦了,用HQL写关联也比较费事,突然发现Hibernate @Formula这个注解可以解决此问题,在此记录一下,之前在网上看到,说此注解必须写在属性上,而不能写在get或set方法上,如果有其他注解写在方法上则 @Formula注解失效。这估计是Hibernate 之前的版本,我使用Hibernate4并没有发现此问题,所有注解全部写在get方法上,@Formula注解成功生效。


实体类如下:


package com.hibernate.ano.formula;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;

import org.hibernate.annotations.Formula;

/**
 * @ClassName: TestFormula.java
 *
 * @Description: Hibernate @Formula注解
 *
 * @author GERRARD
 *
 * @date 2015年1月27日下午2:06:03
 * 
 */
@Entity
@Table(name = "test_formula")
public class TestFormula {
	
	/**
	 * 用户ID
	 */
	private String userId;
	
	/**
	 * 性别ID
	 */
	private String sex;
	
	/**
	 * 虚拟字段:根据userId从user_info表获取中文名
	 */
	private String userName;
	
	/**
	 * 虚拟字段:根据sex从code_list表获取对应汉字值
	 */
	private String sexValue;

	public TestFormula() {
		
	}

	public TestFormula(String userId, String sex) {
		this.userId = userId;
		this.sex = sex;
	}

	@Column(name = "user_id", length = 25)
	public String getUserId() {
		return userId;
	}

	public void setUserId(String userId) {
		this.userId = userId;
	}

	@Column(name = "sex", length = 3)
	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

	@Formula("(select t.user_name from user_info t where t.user_id = user_id)")
	public String getUserName() {
		return userName;
	}

	public void setUserName(String userName) {
		this.userName = userName;
	}

	@Formula("(select t.code_value from code_list t where t.code = sex)")
	public String getSexValue() {
		return sexValue;
	}

	public void setSexValue(String sexValue) {
		this.sexValue = sexValue;
	}

	
}
 

其中

@Formula("(select t.user_name from user_info t where t.user_id = user_id)")

表示这个字段的值,是表user_info 中user_name 的值,过滤条件是user_id =当前实体类userId对应的值,加入查询test_formula这个表后,这个实体类的userId的值是admin,那么where t.user_id = ‘admin’,最后 本实体类中的userName就等于 ‘系统管理员’


@Formula("(select t.code_value from code_list t where t.code = sex)")同样道理


这里需要注意的是:@Formula中写的是纯SQL语句而非HQL语句,且SQL要写在@Formula("(SQL)")中,不要忘记双引号和括号。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值