关于EntityManager的createNativeQuery!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

不关橙猫猫事的哦 2014-03-04 07:56:21
createNativeQuery(sql,XXX.class),如果XXX没有建立和表的关系的话,执行会报错。
但是要查询多张表的数据,所以想建这么一个XXX,存放多张表的字段,也要配置和数据库的关系才能自动把值注入到XXX的对象去么?
求代码。不要那种笨方法哦,我知道可以用object[]来获取,但是要把object[]一个个的赋值给XXX的属性,很麻烦。。
...全文
7300 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
clcl456456 2015-11-17
  • 打赏
  • 举报
回复
同样遇到这个问题,楼主解决了吗?
闲等莫 2015-09-06
  • 打赏
  • 举报
回复
同样遇到这个问题。。。。
lihuapiao 2015-08-19
  • 打赏
  • 举报
回复
我现在也是遇到这个问题,先分别两个表分组查询,然后再内连接组合成新表,那entityclass该怎么写运行才不报错?
xiaoxionghero 2014-07-17
  • 打赏
  • 举报
回复
遇到一个问题了,如果查询这张表中的几个字段,那该如何查询?如果直接使用实体类的话或报错的。
  • 打赏
  • 举报
回复
还是没法解决啊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  • 打赏
  • 举报
回复
还是没法解决啊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
  • 打赏
  • 举报
回复
还是没法解决啊。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
u010840652 2014-03-09
  • 打赏
  • 举报
回复
不懂。我是来看看能不能混点积分的
  • 打赏
  • 举报
回复
引用 5 楼 fangmingshijie 的回复:
你的sql语句是多表?那结果应该是多个实体的object数组。
是多表啊,然后一行就放到object[]中,现在就想把object[]自动转换成实体,找了好几天了,还是没找出方法,用@SqlResultSetMapping返回的也是object[],不会自动转成实体的。。。
引用 7 楼 huxiweng 的回复:
2种方案你都提到了吧。 返回要么是object[],你需要自己转,要么就实体类直接关联上值
现在就是不想返回object[],自动转成实体。。
引用 10 楼 gyl05414 的回复:
[quote=引用 3 楼 fangmingshijie 的回复:] 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 三个元素 导致了整个结果集中每个集合的长度不一致了,请问应该怎么解决?[/quote] 怎么会返回不同列呢。。同一个语句返回的列都一样吧。。
  • 打赏
  • 举报
回复
引用 3 楼 fangmingshijie 的回复:
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 三个元素 导致了整个结果集中每个集合的长度不一致了,请问应该怎么解决?
teemai 2014-03-06
  • 打赏
  • 举报
回复
2种方案你都提到了吧。 返回要么是object[],你需要自己转,要么就实体类直接关联上值
  • 打赏
  • 举报
回复
你的sql语句是多表?那结果应该是多个实体的object数组。
  • 打赏
  • 举报
回复 1
引用 3 楼 fangmingshijie 的回复:
Query createNativeQuery(String sql, Class entityClass) 这个方法是简单的实体原生查询,查询结果和你实体对应即可,不一定实体要和表对应。 多实体原生查询要使用@SqlResultSetMapping注解,这个自己可以搜下的。
@Entity @SqlResultSetMapping(name="articleResult", entities= { @EntityResult(entityClass=ArticleDTO.class, fields= { @FieldResult(name="id", column="id"), @FieldResult(name="title", column="title"), @FieldResult(name="created", column="created"), @FieldResult(name="text", column="text"), @FieldResult(name="cat_name", column="cat_name"), @FieldResult(name="author", column="author") }) } ) public class ArticleDTO implements Serializable { private String id; private String title; private Date created; private String createdStr; private String text; 。。。。。。。。。。。。。。。。。。。。 } Query query = this.getEntityManager().createNativeQuery(sql.toString(),"articleResult"); List<ArticleDTO> list = (List<ArticleDTO>)query.getResultList(); ArticleDTO art = list.get(0); 结果会报ClassCaseException,object[]不能转为articleDTO。。
ay转身遇 2014-03-06
  • 打赏
  • 举报
回复
还是加关联吧。
莱阳码农 2014-03-06
  • 打赏
  • 举报
回复
实体类里加关联映射,只是查询的时候会发很多sql
  • 打赏
  • 举报
回复
Query createNativeQuery(String sql, Class entityClass) 这个方法是简单的实体原生查询,查询结果和你实体对应即可,不一定实体要和表对应。 多实体原生查询要使用@SqlResultSetMapping注解,这个自己可以搜下的。
antony0203 2014-03-05
  • 打赏
  • 举报
回复
只是用来做查询的话数据库建个View就行了,剩下的跟实体表一样,字段都能映射到java类
李保强 2014-03-04
  • 打赏
  • 举报
回复
不建立跟数据表的关系意味着entityManager找不到对应的表,所以会报错。建议还是使用笨点的方法吧,建立一个实体,但是映射为表,查到的各个实体属性赋值给这个实体,我只会这种办法了,不知道能不能帮到你。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧