Hibernate @Formula注解

Hibernate中@Formula注解的最佳实践 本文详细解析了Hibernate**@Formula注解,展示了从简单字段拼接至复杂SQL表达式应用场景。作为增强Hibernate映射灵活性的利器,需注意性能优化与适用场景。遵循本文最佳实践,可有效简化实体映射并保持数据库结构整洁。如有关于@Formula**或Hibernate的疑问,欢迎留言讨论!如果您学习过程中如遇困难?可以加入我们超高质量的Spring技术交流群,参与交流与讨论,更好的学习与进步!更多Spring Boot教程可以点击直达! 阅读详情

在使用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)")中,不要忘记双引号和括号。

@Formula的作用和使用 里面讲述了Formula的作用和使用方法 立即下载

相关推荐

Skiplist,B,B+tree,LSM tree

SkipList 理解(如何实现): 即使是有序的链表,查找的时间复杂度也是O(n),但链表不能随机访问所以不适用于二分查找,使得查找的时间复杂度为O(logn)。 于是将有序链表和二分查找结合得到了SkipList,类似于二叉搜索树,这是一种以空间换时间的算法,通过在每个节点中增加向前的指针,从而提升查找效率(如下图所示)。 一开始如a所示,是一个有序的链表,时间复杂度O(n)。随后建立了e所示的SkipList,从最顶层往下查找,可以跳过许多元素,减少查找次数。 ​

weixin_45875458的博客 947

hibernate 注解@Formula解析和使用简介

一.hibernate 注解@Formula即hibernate提取属性也叫做计算属性,该属性值是一个值读属性,是通过使用sql语句获取得到的,常用的是统计数据。 例如:我有一个employee实体类,该类有主键Id或name,月薪水(monthlySalary)等属性(字段),你现在有一个想法想要获取该employee的年薪,计算方式是月薪*12个月=年薪。 package net.ozar

kakolukiya的博客 7496

跟着Cell学单细胞转录组分析(五):单细胞转录组marker基因鉴定及细胞群注释

书接上回(跟着Cell学单细胞转录组分析(四):单细胞转录组测序UMAP降维聚类)。完成数据降维和细胞聚类后,最主要的环节和工作就是确定各个细胞群,明确是什么类型的细胞,正群的细胞定群很关键,涉及到整个研究,所以这一步宁愿多费时间,也不要出错。当然,这也不是一蹴而就的,需要反复的确认。 要确定各个群是什么细胞,首先需要了解细胞群的marker基因,因为不同类型的细胞突出 表达的基因也是不同的。这里使用FindAllMarkers鉴定各个细胞群的高表达基因。 DefaultAssay(scedata)

qq_42090739的博客 1万+

Hibernate实战——@Formula注解

一配置文件 <?xml version="1.0" encoding="GBK"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-con...

实践求真知 647

5GCPE与4G物联网卡兼容实战:通过AT指令修改IMEI实现设备迁移

本文详细介绍了如何通过AT指令修改5GCPE设备的IMEI,实现4G物联网卡的设备迁移。从硬件准备、驱动安装到串口工具配置,再到具体的AT指令操作步骤,提供了全面的实战指南。文章还包含信号优化、APN设置等实用技巧,帮助用户顺利完成设备迁移并提升网络性能。

weixin_28684757的博客 635

Open3D 点云重叠区域检测【2025最新版】

本文介绍了一种基于八叉树和KD树的点云重叠区域检测方法。算法提供两种检测模式:八叉树(快速)和KD树(精确),支持可视化显示和详细统计信息输出。实现功能包括边界扩展、索引去重、精度调节等,可通过max_depth参数控制八叉树细分程度,distance_threshold调整检测精度。代码使用Open3D库,能自动计算并显示各点云的重叠比例和点数统计,最终结果以不同颜色区分重叠与非重叠区域。该方案适用于三维点云数据处理中的重叠分析任务。

点云侠的博客 599

Hibernate @Formula 攻略

阅读对象:   1.已经在使用Hibernate JPA完成持久化映射的朋友。   2.在网上搜索Formula并通通搜到转载oralce一篇技术文章或hibernate annotations技术文档的朋友。   3.发现@Formula不能使用并想Ctrl+Delete hibernate jar包,然后砸烂显示器的朋友。   文章内容   本文将说明如何使用@Formula,并且说明在哪几...

solonote的专栏 1019

论文阅读: SIGIR 2025 ID-Free Not Risk-Free: LLM-Powered Agents Unveil Risks in ID-Free Recommender Syste

咱们平时用的推荐系统(比如购物APP推商品、视频APP推剧),大多是“有ID”的——每个用户、每个商品都有个专属ID,系统靠这些ID记录你的浏览、购买历史,再给你推喜欢的东西。但这种方式有个大问题:新用户、新商品刚上线时没有ID历史数据,系统没法精准推荐,这就是“冷启动”难题。后来人们搞出了“无ID推荐系统”:不用ID了,改成直接分析商品的文字信息(比如商品标题、描述),靠大语言模型(LLM,类似ChatGPT的技术)把文字转成“语义代码”,再通过这些“代码”判断你可能喜欢什么。

CSPhD-winston的博客 977

@Formula

@Formula 计算临时属性。 相当于可以关联查询字段,然后放在实体中当做属性使用。 任务:在User实体层,增加一个额外的属性,来获取Test表中的name字段。 1 表结构 User表 Test表 2 User实体层(省略了部分字段。) @Entity @Table(name = "user", catalog = "testdb") @DynamicUpda...

正怒月神的博客 4113

保姆级教程:一步步创建 ABAP Text Table

有朋友反馈,问有没有一个自己动手创建 Text Table 的例子,因为自己没有动手实践过,总觉得心里不踏实。这个行为的语义是,ZAI_TYPE_T 这张表的 AI_TYPE 字段值,不能随便维护,必须是表。然后另一个需要添加的字段是 AI_TYPE 这个字段值对应的文本值,本例笔者采用 SAP 标准的。也是自己创建的,很简单的一个 Data Element,类型为 CHAR,长度为 2.依次给主表的 01,02,03 三个字段值维护对应的描述信息,最后效果如下。按照下面的字段结构,创建另一。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4278

C#实战大华智能安防系统:从SDK封装到视频流与智能报警的全链路落地

本文将介绍C#集成大华SDK开发安防系统的实战经验,重点解决多路视频预览卡顿和报警延迟问题。文章通过三层架构设计(SDK封装层、业务服务层、应用层)实现解耦,详细分析线程安全封装、高效解码显示和智能事件联动等核心技术。针对16路摄像头同时预览时CPU占用率过高的问题,提出使用子码流拉流与异步解码的优化方案,并总结8个常见开发陷阱的解决方案。文中还提供了大华智能安防系统的完整架构图,展示从设备层到应用层的交互流程,特别强调业务服务层中视频流服务和智能报警服务的核心功能设计。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 432

JPA/Hibernate 中@Formula的作用

@Formula 介绍: 在hibernate中有很多注解。每个注解都有其执行操作的重要性。同样,@Formula是一个hibernate 注解,用于计算动态值并将该值分配给属性。 @Formula注解接受一个表达式作为参数,并且在获取的时候它将计算这个表达式并将值赋给对象中的成员属性。 这个@Formula 参数可能是一个简单的表达式,也可能是一个复杂的查询,它用在属性的上面。 在本教程中,我们将使用jpa/hibernate 中的 @Formula 注解来计算 Employee 的总工资。 @Formu

hello world 2074

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

使用hibernate 提取属性 hibernate 注解@Formula

1 关于hibernate的@Formula用法和作用可以参照别的文章 2 hibernate提取属性也叫做计算属性,该属性值是一个值读属性,是通过使用sql语句获取得到的,常用的是统计数据 3 案例:我有一个employee实体类,该类有主键Id或name,月薪水(monthlySalary)等属性(字段),你现在有一个想法想要获取该employee的年薪,计算方式是月薪*12个月=年薪。

一名清官 7072

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Hibernate注解 @Formula

package com.hibernate.ano.formula; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Table; import org.hibernate.annotations.Formula; /** * @Class

fengxue_love的博客 480

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

【Hibernate学习笔记-5】@Formula注解的使用

ORM映射关系:注解方式package org.crazyit.app.domain;import javax.persistence.*;import org.hibernate.annotations.Formula;@Entity(name="news_inf")public class News{ // 消息类的标识属性 @Id @GeneratedValue(strategy=Gener...

weixin_34032827的博客 198

hibernate 中 addEntity() 与 @Formula 注解同时使用是遇到的问题

今天使用hibernate 的 createSQLQuery 方法, 使用原生sql查询数据, 本来想直接使用 query.addEntity("${p.*}", Student.class) 将结果封装成实体, 但是程序在 query.list() 方法中一直报 空指针异常,   java.lang.NullPointerException at org.hibernate.load

java-北京-菜鸟 2114

Hibernate @Formula 注解方式

1.Formula的作用   Formula的作用就是用一个查询语句动态的生成一个类的属性   就是一条select count(*)...构成的虚拟列,而不是存储在数据库里的一个字段。用比较标准的说法就是:有时候,你想让数据库,而非JVM,来替你完成一些计算,也可能想创建某种虚拟列,你可以使用sql片段,而不是将属性映射(物理)列。这种属性是只读的(属性值由公式求得).For...

228

孙卫琴的《精通JPA与Hibernate》的读书笔记:用@Formula注解映射派生属性

并不是持久化类的所有属性都直接和表的字段匹配,持久化类的有些属性的值必须在运行时通过计算才能得出来,这种属性称为派生属性。下面介绍利用Hibernate的@Formula注解来映射派生属性。 @Formula注解用来设置一个SQL表达式,Hibernate将根据它来计算出派生属性的值。 下面以Customer类的totalPrice属性为例,介绍@Formula注解的用法。Customer类的totalPrice属性表示客户的所有订单的价格总和,它的取值为与Customer对象关联的所有Order对象的pr

csdnuserlala的博客 378

Hibernate中@Formula注解的使用

Hibernate 实体类 注解 大全

璎珞的博客 782

hibernate @Formula

有时我们如果想要查询某些不在该表的字段,我们可以不用hql来实现,hibernate为我们提供了@Formula这个注解,通过这个注解我们可以达到我们想要的结果,代码如下: package com.cmh.beans;import javax.persistence.*;import org.hibernate.annotations.Formula; /** * @ClassName: T

ooiuy450的专栏 1065

hibernate注解@Formula

@Formula("(select o.PERIOD_NAME from T_EMI_CYCLE  o where o.ID=CYCLE_ID)")   ,CYCLE_ID 是外键

u014169027的博客 335

Hibernate @Formula实例

            最近对Hibernate 标注比较感兴趣,  研究 @Formula 有些疑惑。做个小例子来加深认识,代码如下:       package com.forumla; import java.io.Serializable; import javax.persistence.Entity; import javax.persistence.Gene...

steve_19851023的博客 141
上一篇: Hibernate Many-to-Many
下一篇: Java利用反射实现对象之间相同属性复制
杰拉拉德
博客等级 码龄17年 643粉丝 38原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值