日期:2014-05-17  浏览次数:21220 次

关于EntityManager的createNativeQuery!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
createNativeQuery(sql,XXX.class),如果XXX没有建立和表的关系的话,执行会报错。
但是要查询多张表的数据,所以想建这么一个XXX,存放多张表的字段,也要配置和数据库的关系才能自动把值注入到XXX的对象去么?
求代码。不要那种笨方法哦,我知道可以用object[]来获取,但是要把object[]一个个的赋值给XXX的属性,很麻烦。。
------解决方案--------------------
不建立跟数据表的关系意味着entityManager找不到对应的表,所以会报错。建议还是使用笨点的方法吧,建立一个实体,但是映射为表,查到的各个实体属性赋值给这个实体,我只会这种办法了,不知道能不能帮到你。
------解决方案--------------------
只是用来做查询的话数据库建个View就行了,剩下的跟实体表一样,字段都能映射到java类
------解决方案--------------------
Query createNativeQuery(String sql, Class entityClass) 这个方法是简单的实体原生查询,查询结果和你实体对应即可,不一定实体要和表对应。
多实体原生查询要使用@SqlResultSetMapping注解,这个自己可以搜下的。
------解决方案--------------------
你的sql语句是多表?那结果应该是多个实体的object数组。
------解决方案--------------------
2种方案你都提到了吧。

返回要么是object[],你需要自己转,要么就实体类直接关联上值
------解决方案--------------------
实体类里加关联映射,只是查询的时候会发很多sql
------解决方案--------------------
还是加关联吧。
------解决方案--------------------
引用:
Query createNativeQuery(String sql, Class entityClass) 这个方法是简单的实体原生查询,查询结果和你实体对应即可,不一定实体要和表对应。
多实体原生查询要使用@SqlResultSetMapping注解,这个自己可以搜下的。

我用em.createNativeQuery(sql);去查询发现,
如果sql执行结果是
1   1
1   1    1
的话。
query.getResultList();返回的结果集对象却变成了
[0] = 1,1 只有两个元素
[2] = 1,1,1  三个元素
导致了整个结果集中每个集合的长度不一致了,请问应该怎么解决?
------解决方案--------------------
不懂。我是来看看能不能混点积分的