【发布时间】:2019-09-09 16:10:17
【问题描述】:
我有两张多对一的桌子。我想按请求参数定义的 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 中效果很好。所有数据均按街道名称排序;
但是当我尝试通过以下方式在邮递员中获取它时:
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)
但我想在需要时控制请求和排序数据(使用排序参数)。
【问题讨论】: