我正在尝试使用 mysql 数据库执行自定义查询@Query
spring data jpa 的注解。
该表是
+------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------+------+-----+---------+-------+
| id | decimal(10,0) | NO | PRI | NULL | |
| first_name | varchar(20) | YES | | NULL | |
| last_name | varchar(20) | YES | | NULL | |
+------------+---------------+------+-----+---------+-------+
mysql 中的查询是
select last_name,count(last_name) as count from person group by last_name;
在 Spring data jpa 中实现这一点。我正在使用这个逻辑,
- 创建另一个类
CountPerson
包含两个变量,last_name
and count
- 使用@Query编写查询,该方法返回对象列表
CountPerson
class.
spring data jpa 中的查询是
@Query("select p.lastName,count(p.lastName) as count from Person p group by p.lastName")
当代码编译并且网络服务器启动正常时,当我尝试运行相关方法时,我得到
There was an unexpected error (type=Internal Server Error, status=500).
No aliases found in result tuple! Make sure your query defines aliases!; nested exception is java.lang.IllegalStateException: No aliases found in result tuple! Make sure your query defines aliases!
搜索此错误显示spring data jpa:在结果元组中找不到别名!确保您的查询定义了别名这表明这是一个已修复的错误。所以我想我的问题是不同的
代码是
人物类
//imports
@Entity
@Table(name = "person")
public class Person{
@Id
Long id;
String firstName;
String lastName;
private Person(){}
//constructor
}
人员存储库类
//imports
@Transactional
public interface PersonRepository extends CrudRepository<Person,Long>{
@Query("select p.lastName,count(p.lastName) as count from Person p group by p.lastName")
public List<CountPerson> countbylastname();
}
控制器类
@Controller
public class PersonController{
@Autowired
PersonRepository repository;
@RequestMapping("/count")
@ResponseBody
public List<CountPerson> countbylastname(){
return repository.countbylastname();
}
}
计数 Person 类
public class CountPerson{
String lastName;
int count;
protected CountPerson(){}
public CountPerson(String lastName,int count){
this.lastName = lastName;
this.count = count;
}
}