EntityManager使用原生查询createNativeQuery并把值映射到自定义实体

最近一直在用JPA,使用了EntityManager作为基本查询方法。EntityManager可以满足基本的增删改查,但实际上很多时候,是必须采用原生查询的。而且,原生查询的返回值必须和自定义实体相配。

当自定义实体对应原生查询的返回值的时候,一般有2种方法。

1)自定义实体类,可以直接运用createNativeQuery的方法。

接口定义如下:

public Query createNativeQuery(String sqlString, Class resultClass)

class的定义,应该使用@Entity定义,并写到JPA配置文件里。

如定义类A,定义如下:

@Entity
public class A {
    @Id
    private String id;  //必须设置主键,实体才能正确

    public String getId() {
        return idarea;
    }

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

JPA配置文件如下,如META-INF/persistence.xml里定义如下:

<class>hello.world.A</class>

然后,执行CreateNativeQuery,即可调用如下方法:

String sql = "需要的语句";
List lst = em.createNativeQuery(sql, A.class).getResultList();

2)使用unwrap和Transformers方法,方法如下:

(1)A正常定义;(无需加@Entity和@Id,无需persistence.xml生成)

(2)执行类似如下语句:

 String sql = "需要的语句";

 NativeQueryImpl query = em.createNativeQuery(sql).unwrap(NativeQueryImpl.class);
 query.setResultTransformer(Transformers.aliasToBean(A.class));

 List lst = query.getResultList();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值