Hibernate @Formula注解
来源:互联网 发布:百度网盘限速 知乎 编辑:程序博客网 时间:2024/09/21 08:18
在使用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)")中,不要忘记双引号和括号。
- Hibernate @Formula注解
- Hibernate注解 @Formula
- hibernate注解@Formula
- 使用hibernate 提取属性 hibernate 注解@Formula
- hibernate 注解@Formula解析和使用简介
- Hibernate中@Formula注解的使用
- hibernate 注解@Formula解析和使用简介
- hibernate @Formula
- Hibernate 3中的formula
- Hibernate 3中的formula
- hibernate 之formula
- hibernate的formula
- hibernate的formula
- Hibernate @Formula 攻略
- Hibernate 3中的formula
- hibernate mapping formula
- hibernate的formula
- hibernate的formula .
- 经典算法实现及思想
- logback高级特性使用(二) 自定义Pattern模板
- silverlight - datagrid样式多表头后,拉伸后表格的表格线不跟着变化
- 根据文件Id和句子Id 得出文本
- Spring 中Bean的生命周期与InitializingBean和DisposableBean
- Hibernate @Formula注解
- Redis 发布与订阅
- logback高级特性使用(三) 异步记录日志
- ASP.NET MVC4全局过滤器
- UVa 532 三维迷宫
- poj1265--Area(求多边形面积+匹克定理)
- 图的基本存储的基本方式一 邻接矩阵
- 顺势营养滴液是什么?
- 谷歌浏览器 fixed 出现bug