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="b
logs">
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公式里的字段都是数据库里的字段名,除了查询条件参数是要和配置文件里的字段匹配。