jpa自定义字段

自定义返回的字段,不知道为啥select new 总是报错,无论是select new Map 还是select new 实体,所以先暂时用下边这个不规范的方法,等我找出原因了会更新

 自定义实体,继上边那个问题后发现自定义实体的话可以实现,首先要加@Entity注解和@Id注解

实体,省略setter和getter

 

 sql:

 

 这里用了一个工具类,封装的就是entitymanager的方法:

 

 测试:

 解决办法二:不知道百度上那些select new是怎么操作的,反正我操作结果集总是不对,但是还是找到了另一种解决方法:

在dao层中的代码,这里的query注解执行sql代码返回的是一个list,也就是这个:List<Object[]> list  = entityManager.createNativeQuery(sql).getResultList();

里边的元素是object[]数组,这里相当于强转一下由Object[]转化为Map<String,Object>

 建议的话还是用对象来接受,因为对象接收的话就相当于mybatis的resultMap,如果元素为空的话是会显示的,但是用map接受的话空元素就不会显示。

测试:

 解决办法三:终于找到了select new 的办法:

首先还是建自定义实体类Test,注意参数类型必须和原类的参数类型相同,且构造方法内的参数顺序和查询的顺序一致,相应的注解也要加:

 

 然后在responsitory中,new Test内的参数与构造方法中的顺序一致,这是hql的写法所以nativeQuery=true这个启用sql语句的参数就不需要了,赋值的话在这里用:id,@Param这个注解也不能少,from表的时候要找对应的实体类而不是数据库中的表名。

 

解决办法四:不用另外创建实体类,返回List<Map<String,Object>>的数据:

 

posted @ 2020-06-29 18:28  ~笑春风~  阅读(1103)  评论(0编辑  收藏  举报