Hibernate中3种结果转换的详细说明
在hibernate使用的过程中.我们通常需要对结果进行解释.

Hibernate为我们提供了以下3种解释方法:

Transformers.ALIAS_TO_ENTITY_MAP //把输出结果转换成map

Transformers.TO_LIST //把结果按顺序排进List

ransformers.aliasToBean(target) //把结果通过setter方法注入到指定的对像属性中

在Hibernate中Transformers的所有转换都是需要实现ResultTransformer接口

详解ALIAS_TO_ENTITY_MAP ,太简单了就是把key和值直接转换到Map当中

    /**
* {@inheritDoc}
*/
//aliases key
//tuple value
public Object transformTuple(Object[] tuple, String[] aliases) {
Map result = new HashMap(tuple.length);
for ( int i=0; i<tuple.length; i++ ) {
String alias = aliases[i];
if ( alias!=null ) {
result.put( alias, tuple[i] );
}
}
return result;
}

详解TO_LIST,转换过程很简单,就是把value转换成List对像

    /**
* {@inheritDoc}
*/
//aliases key
//tuple value
public Object transformTuple(Object[] tuple, String[] aliases) {
return Arrays.asList( tuple );
}

详解aliasToBean,转换过程就是通过读取查询后的字段.然后通过使用setter方法注入到目标对像中

public AliasToBeanResultTransformer(Class resultClass) {
if ( resultClass == null ) {
throw new IllegalArgumentException( "resultClass cannot be null" );
}
this.resultClass = resultClass;
//定义属性访问器.
propertyAccessor = new ChainedPropertyAccessor(
new PropertyAccessor[] {
PropertyAccessorFactory.getPropertyAccessor( resultClass, null ),
PropertyAccessorFactory.getPropertyAccessor( "field" )
}
);
} public Object transformTuple(Object[] tuple, String[] aliases) {
Object result; try {
if ( setters == null ) {
setters = new Setter[aliases.length];
for ( int i = 0; i < aliases.length; i++ ) {
String alias = aliases[i];
if ( alias != null ) {
//初始指定的setter方法
setters[i] = propertyAccessor.getSetter( resultClass, alias );
}
}
}
//实例实体对像
result = resultClass.newInstance(); for ( int i = 0; i < aliases.length; i++ ) {
if ( setters[i] != null ) {
//向setter方法中指定的属性注入值
setters[i].set( result, tuple[i], null );
}
}
}
catch ( InstantiationException e ) {
throw new HibernateException( "Could not instantiate resultclass: " + resultClass.getName() );
}
catch ( IllegalAccessException e ) {
throw new HibernateException( "Could not instantiate resultclass: " + resultClass.getName() );
} return result; }

Hibernate中3种结果转换的详细说明(转)的更多相关文章

  1. Hibernate Transformers之三种结果转换说明

    在hibernate使用的过程中,我们通常需要对结果进行解释.Hibernate为我们提供了以下3种查询结果解释方法: Transformers.ALIAS_TO_ENTITY_MAP //把输出结果 ...

  2. Hibernate-ORM:06.Hibernate中三种状态

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客主要叙述Hibernate中的三种状态:临时状态(瞬时状态),持久状态,游离状态 commit和flu ...

  3. 面试问题之C++语言:说一说C++中四种cast转换

    C++中四种类型转换是:static_cast.dynamic_cast.const_cast.reinterpret_cast 1.const_cast 常量转换,用于将const变量转为非cons ...

  4. hibernate中一种导致a different object with the same identifier value was already associated with the session错误方式及解决方法

    先将自己出现错误的全部代码都贴出来: hibernate.cfg.xml <?xml version="1.0" encoding="UTF-8"?> ...

  5. Hibernate中两种获取Session的方式

    转自:https://www.jb51.net/article/130309.htm Session:是应用程序与数据库之间的一个会话,是hibernate运作的中心,持久层操作的基础.对象的生命周期 ...

  6. Hibernate中createCriteria即QBC查询的详细用法 .Hibernate中createCriteria即QBC查询的详细用法 .

    现在假设有一个Student类,内有id,name,age属性String hql = "from Student s";按照以前的做法,我们通常是Query query = se ...

  7. Hibernate中createCriteria即QBC查询的详细用法

    现在假设有一个Student类,内有id,name,age属性String hql = "from Student s";按照以前的做法,我们通常是Query query = se ...

  8. Hibernate中两种删除用户的方式

    第一种,是比较传统的,先根据主键列进行查询到用户,在进行删除用户 //删除数据 public void deleteStudent(String sno) { init() ; Student qu ...

  9. Hibernate中的对象图关系转换:游离、持久、自由状态

随机推荐

  1. cf B. Little Dima and Equation

    http://codeforces.com/contest/460/problem/B import java.util.*; import java.math.*; public class Mai ...

  2. C之函数指针

    这方面的技能,在观察系统调用时,是很需要的. 但我不是很熟悉,另外,要再会函数指针数组的话,那就更强啦~~ 按<HEAD FIRST C>作了个样例: cat find.c #includ ...

  3. 《Programming WPF》翻译 第5章 5.数据模板和样式

    原文:<Programming WPF>翻译 第5章 5.数据模板和样式 让我们想象一下我们想要实现TTT更有娱乐性的一个版本(这是大部分游戏中最重要的特色).例如,TTT的一种变体允许玩 ...

  4. Vim 默认开启行号、语法显示等设置

      在终端下使用vim进行编辑时,默认情况下,编辑的界面上是没有显示行号.语法高亮度显示.智能缩进等功能的.为了更好的在vim下进行工作,需要手动设置一个配置文件:.vimrc. 在启动vim时,当前 ...

  5. C++的ABI真特么是evil

    果然有些公司明确禁止使用STL也是有一定道理的.其实这个问题的本质就是认为大部分开发者是蠢货,没水平掌控这些细节,项目Release万一出乱子了怎么办?为此吐个槽,我链接一个库时,由于编译参数和链接参 ...

  6. Eclipse标准版安装J2EE

    虽然有Eclipse IDE for Java EE Developers,已经包含了j2ee的插件,但有时我们需要在标准版上安装插件来达到开发j2ee的功能. 安装 Java EE 插件:  * 依 ...

  7. hdu 1829 A Bug's Life(并查集)

                                                                                                    A Bu ...

  8. OnlineJudge 离线题库采集

    过段时间要把以前的OJ换掉,我负责VirtualJudge的部分.需要用C与PHP写一个Linux下的VJudge. 在此之前,将以前写给自己学弟学妹用的OJ离线题库的采集程序改进了一下.支持国内一些 ...

  9. 【CDOJ931】Car race game(树状数组求逆序)

    题目连接:http://acm.uestc.edu.cn/#/problem/show/931 OJ评判系统有些坑,不支持__int64以及输出的%I64d大家注意.全开long long也会TLE, ...

  10. Java学习作业(14.4.21)

    前三次作业都是基础语法.真的好水啊.从这次开始记录. 1.编写Java程序,把当前目录下扩展名为txt的文件的扩展名全部更名为back. import java.io.*; import java.l ...