我有两个具有多对一关系的表。我想按请求参数定义的 ASC 或 DESC 方向按“地址”表中的“街道”列对“用户”表中的数据进行排序:
localhost:8080/getUsers?sort=address,desc
当我执行sql脚本时:
SELECT * FROM user INNER JOIN address ON user.address_id=address.id ORDER BY street DESC
在工作台或 phpMyAdmin 中它运行良好。所有数据均按街道名称排序;
但是当我尝试通过 postman 获取它时:
getUsers?sort=address,desc
我在控制台输出中遇到此错误:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'INNER.address' in 'order clause'
问题出在哪里?
@Table(name = "user")
public class User {
private Long id;
private String name;
@ManyToOne()
@JoinColumn(name = "address_id")
private Address address;
}
@Table(name = "address")
public class Address {
private Long id;
private String street
@OneToMany(mappedBy = "address")
private List<User> user;
}
public interface UserRepository extends JpaRepository<User, Long> {
@Query(value = "SELECT * FROM user INNER JOIN address ON user.address_id=address.id",
countQuery = "SELECT * FROM contact_messages INNER JOIN contact_topics ON contact_messages.contact_topic_id=contact_topics.id",
nativeQuery = true)
Page<User> findAll(Pageable pageable);
}
此外,当我在存储库中编写这样的查询时,它的工作效果与在工作台中一样好:
@Query(value = "SELECT * FROM user INNER JOIN address ON user.address_id=address.id ORDER BY address DESC",
countQuery = "SELECT * FROM contact_messages INNER JOIN contact_topics ON contact_messages.contact_topic_id=contact_topics.id ORDER BY address DESC",
nativeQuery = true)
但我想在需要时控制请求和排序数据(使用排序参数)。
最佳答案
尝试将 SQL 替换为 SELECT u, a FROM user u INNER JOIN u.address a ORDER BY street DESC
关于java - 如何使用内连接按页面请求排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57857619/