Spring Data JPA 查询自定义字段 java.sql.SQLException: Column ‘列名‘ not found

 

在做查询语句时,我用到了别名,而且查询的字段是表里其中的几个,而且别名是对应表里的字段名!!实体类也有对应属性!

Repository 接口定义了对应的借口,返回的是一个List集合

    @Query(value = "select min(begin_date) as begin_date , max(end_date) as end_date, DATEDIFF(max(end_date),min(begin_date)) as days from workTime where user_id=:userId", nativeQuery=true)
     List<WorkTimeEntity> findDay(@Param("userId") Long userId);

 然后就出现了问题:

wenti

 

解决方法:

方法1: 用Map来接收(简单)

数据库的日期格式传到java有(.0)所以要转换一下格式

    @Query(value = "select DATE_FORMAT(min(begin_date),'%Y-%m-%d %H:%I:%s')  as begin_date ,DATE_FORMAT(max(end_date),'%Y-%m-%d %H:%I:%s') as end_date, DATEDIFF(max(end_date),min(begin_date)) as days from workTime where project_id=:projectId", nativeQuery=true)
    Map<String,Object> findDay(@Param("projectId") Long projectId);

正好我的Controller接收也是Map,然后就直接传到前端!!

方法二:用对象来接收  

首先要创建一个根据你要查询的字段的entity对象,@Id 注解必须要有,不然会报错,@Column注解的name要和数据库查询出来的字段要一致

 

直接在service层写

    @PersistenceContext
    EntityManager entityManager;

    public AttendanceEntity findTime(Long id){
        //自定义sql
        String sql="select min(begin_date)  as begin_date ,max(end_date) as end_date, DATEDIFF(max(end_date),min(begin_date)) as days from workTime where user_id=:userId";
        //传入两个参数,一个是sql语句,一个是返回的entity对象!!
        Query query = entityManager.createNativeQuery(sql, AttendanceEntity.class);
        //把参数传入query中,接收多少个参数,就要set多少个参数
        query.setParameter("userId", id);
        //使用query的getSingleResult方法,返回对象
        //也可以用List来接收,query有对应的方法
        AttendanceEntity attendanceEntity = (AttendanceEntity)query.getSingleResult();

        System.out.println("userEntity::"+attendanceEntity);
        return attendanceEntity;
    }

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值