Java Data JPA +hibernate 保存或者是查询遇到的坑
由于项目需求,接触了Java Data JPA +hibernate,它的调用方式是controller调用service,service有实现的接口serviceimpl,serviceimpl调用Dao,Dao中用注解@Query写HQL语句(如果要直接写原生的SQL语句@Query中加value="sql语句",nativeQuery=true),要新增或者修改或者是删除时除了加@Query还要加@Modifying注解才能生效。
多表联查用一个vo对象包含你所需要的字段,例如:
@Query("select new com.catsic.casee.yn.law.entity.SfmVo(sfm.dm,sfm.sfmc,sfm.sfjc,sfm.orderid,gsb.dm as odm , gsb.mc as odmmc) from Sfm sfm left join Qxgsbmb gsb on sfm.sfmc = gsb.sfmc where gsb.parentdm like %?1% order by gsb.layer asc")
public List
SfmVo就是你所需的对象,new时字段名称一一对应,大小写对应。
第二种方法用一个map接受Map
@Query(value = "select new map(sfm as sfm ,gsb as gsb ) from Sfm sfm left join Qxgsbmb gsb on sfm.sfmc=gsb.sfmc where gsb.parentdm =:parentdm")
List
1.特别遇到的 坑是,新增的实体包含Timestamp类型,对应数据库的Datat类型。新增时hibernate会把Timestamp类型直接保存为Datat类型。
但是如果数据库是Datat类型,你查询后获得的是String类型,就和你接收Vo的Timestamp类型不符合。总报错。这时候你的把接收到的String类型转换为Vo的Timestamp类型,那Vo类就能正常接收了。
2.如果使用nativeQuery=true的SQL语句,返回List