hibernate sql 自定义字段 返回自定义bean对象

标签: hibernate
2018-01-17 阅读(640)

hibernate用原生SQL查询如何返回自定义对象而非实体对象呢?使用SQLQuery对象的addScalar()和setResultTransformer()可以实现。


首先定义实体:

package com.weizhixi.entity;

import javax.persistence.*;

@Entity
public class User {
    private int id;
    private String name;

    @Id
    @GeneratedValue
    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


再自定义vo或者其他bean类

package com.weizhixi.vo;

public class UserVo {
    private int id;
    private String name;
    private String fname;//注意,这个字段实体类是没有的

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }
}


接下来演示查询:select u.id, u.name, u.name as fname from user u 原生sql,自定义了fname字段,fname不是实体属性和数据库字段。查询后返回UserVo值对象。

Query query = session.createSQLQuery("select u.id,u.name,u.name as fname from user u")
      .addScalar("id", Hibernate.INTEGER)
      .addScalar("name", Hibernate.STRING)
      .addScalar("fname", Hibernate.STRING)
      .setResultTransformer(Transformers.aliasToBean(UserVo.class));
List<UserVo> users = query.list();
for(UserVo user : users){
   System.out.println(user.getId() + "\t-\t"+user.getName() + "\t-\t" + user.getFname());
}


控制台:

Hibernate: select u.id,u.name,u.name as fname from user u
1	-	hello	-	hello



原创文章,转载请注明出处:https://www.weizhixi.com/user/index/article/id/62.html

分类:
点击(729) 阅读(640) 举报