初学spring boot,整合jpa+hibernate会遇到的坑

在repository中写@Query(“”)自定义sql,启动项目发现报错。

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'personRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Validation failed for query for method public abstract com.demo.bean.Person com.demo.repository.PersonRepository.findPerson(int)!

查了好多,网上说了好多但都不是这个问题。最后发现问题所在,写@Query自定义sql时

select * from 表名

,由于hibernate是与实体类是强关联的。所以这里sql中的表明应该要写对应实体类的类名,如我的实体类名为Person。改为

select * from Person

就好了。

但是这样写总是感觉不是很舒服,还是觉得sql就是写原生的sql语句舒服,那么就需要在实体类中加注解@Table,其中@Table是对应的数据库表明,@Column对应的是字段名。

然后需要在sql后面加上 nativeQuery = true

@Query(value="select t.name,count(t.name) from person t where t.id = ?1",nativeQuery = true)

最后启动成功后,如果调用接口发现报错

java.sql.SQLException: Column 'id' not found.

排除数据库没有该字段的问题。那么出现这个问题的原因就是因为hibernate是强关联实体类的。由于查询语句查出来的字段并不是全部的,那么就会报错找不到字段。解决办法是将返回类型改为Object。然后再根据业务需求转为实体对象。

我这里用的JSONObject接收的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值