Hibernate中formula的使用

本文介绍如何在Java实体类中使用Formula生成属性,并通过HQL配置实现复杂查询,包括虚拟列和数据库未包含的列的计算。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

formula 可以利用SQL语动态的生成java属性(实体要存在相应的属性)

规则是 在from后边必须是表名,

当有where条件时必须有别名,以便调用

和虚拟列的差别是 虚拟列只能在调用本类中的数据,而formula还可以调用别的表中的数据



这个是一个非常好用而且非常实用的属性。

如果你希望查询一些数据库中没有的此列的数据,如:截取字符串,或链接字符串或者一些求值函数(sum,average,max)等等。你可以不需要像以往在程序里做了,在配置文件里我们可以直接完成这些操作。

我的数据库里有三个字段 uId(主键),uFirst(字段一),uSecond(字段二)

我的POJO




view plaincopy to clipboardprint?
01.public class Users {
02.
03. private int uid;
04.
05. private String ufirst;
06.
07. private String usecond;
08.
09. private String uinfo;
10. public String getUinfo() {
11. return uinfo;
12. }
13. public void setUinfo(String uinfo) {
14. this.uinfo = uinfo;
15. }
16. public int getUid() {
17. return uid;
18. }
19. public void setUid(int uid) {
20. this.uid = uid;
21. }
22. public String getUfirst() {
23. return ufirst;
24. }
25. public void setUfirst(String ufirst) {
26. this.ufirst = ufirst;
27. }
28. public String getUsecond() {
29. return usecond;
30. }
31. public void setUsecond(String usecond) {
32. this.usecond = usecond;
33. }
34.}


比如我配置文件是这样配置的




view plaincopy to clipboardprint?
01.<?xml version="1.0" encoding="utf-8"?>
02. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
03. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
04. <!--
05. Mapping file autogenerated by MyEclipse Persistence Tools
06. -->
07. <hibernate-mapping>
08. <class name="domain.Users" table="users" catalog="blogs">
09. <id name="uid" type="java.lang.Integer">
10. <column name="uId" />
11. <generator class="native" />
12. </id>
13. <property name="ufirst" type="java.lang.String">
14. <column name="uFirst" />
15. </property>
16. <property name="usecond" type="java.lang.String">
17. <column name="uSecond" />
18. </property>
19. <property generated="insert" name="uinfo" formula="(select concat(u.uFirst,u.uSecnod) from users u where u.uId = uid)"/>
20. </class>
21.</hibernate-mapping>


配置文件中的属性uinfo在数据库里是不存在的,但是我们要用到一些功能比如我要在插入的时候把第一个字段和第二个字段链接起来,那我们就可以在我们的hibernate mapping文件里使用公式以上的公式.

那我们的操作类里怎么写呢。




view plaincopy to clipboardprint?
01.Users u = new Users();
02.u.setUfirst("sasa4");
03.u.setUsecond("123456");
04.Transaction tran = session.beginTransaction();
05.session.save(u);
06.tran.commit();
07.//下面将可以取道我们的公式运行完返回值
08.System.out.println(u.getUinfo());


注意: 1 formula="(sqlStr)" 的格式不能变,标点也不能少。

2 formula公式里的字段都是数据库里的字段名,除了查询条件参数是要和配置文件里的字段匹配。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值