Hibernate学习篇02——Hibernate formula

来源:互联网 发布:淘宝五星好评 编辑:程序博客网 时间:2024/05/14 23:50

formula是配方的意思

formula里必须是纯sql语句,不能是hql语句。

Hibernate在实现formula的时候实际上是使用子查询来查询的。

表结构

drop table user1;create table USER1(  ID       VARCHAR2(32) primary key,  USERNAME VARCHAR2(32),  PASSWORD VARCHAR2(32),  NAME     VARCHAR2(32));insert into user1 (id,username,password,name) values ('8a8703de51d2e86e0151d2e870690000','zhangsan','111111','zs');insert into user1 (id,username,password,name) values ('8a8703de51d2e45c0151d2e45de00000','lisi','222222','ls');commit;

User.hbm.xml

<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping package="com.masteringhibernate.a02formula"><class name="User" lazy="true" table="USER1"><id name="id"><generator class="uuid"/></id><property name="username" /><property name="password" /><property name="name" /><!-- the character '(' and ')' is required --><property name="usernameAndPassord" formula="(select username||password from user1 u where u.id = id )" /></class></hibernate-mapping>

User.java

package com.masteringhibernate.a02formula;public class User {private String id;private String username;private String password;private String name;private String usernameAndPassord;public String getUsernameAndPassord() {return usernameAndPassord;}public void setUsernameAndPassord(String usernameAndPassord) {this.usernameAndPassord = usernameAndPassord;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getName() {return name;}public void setName(String name) {this.name = name;}}

Test.java

package com.masteringhibernate.a02formula;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class Test {private static SessionFactory sessionFactory;public static void main(String[] args) {init();select();}private static void init() {// configure() must be invokedConfiguration configuration = new Configuration().configure("com/masteringhibernate/a02formula/hibernate.cfg.xml");sessionFactory = configuration.buildSessionFactory();}private static void select() {Session session = sessionFactory.openSession();Query query = session.createQuery("from User");List<User> list = query.list();for (User user : list) {System.out.println("id:" + user.getId() + "\t\tusername:"+ user.getUsername() + "\t\tpassword:" + user.getPassword()+ "\t\tname:" + user.getName() + "\t\tusernameAndPassord:"+user.getUsernameAndPassord());}session.close();}}
Hibernate: select user0_.id as id0_, user0_.username as username0_, user0_.password as password0_, user0_.name as name0_, (select user0_.username||user0_.password from user1 u where u.id = user0_.id ) as formula0_ from USER1 user0_
id:8a8703de51d2e86e0151d2e870690000 username:zhangsanpassword:111111name:zsusernameAndPassord:zhangsan111111
id:8a8703de51d2e45c0151d2e45de00000 username:lisipassword:222222name:lsusernameAndPassord:lisi222222

从上面的log中我们可以看出,usernameAndPassord是作为子查询单独作为一个伪列存在的。


0 0
原创粉丝点击