【发布时间】:2018-08-23 06:42:25
【问题描述】:
我在 Mysql 中使用 springboot 和 springdata。
我有 2 个实体,客户和订单:
@Entity
@Table(name = "customers")
public class Customer {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="id", nullable = false)
protected long id;
@Column(name = "name")
private String name;
}
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
@Column(name="id", nullable = false)
protected long id;
@Column(name="customer_id")
private long customerId;
}
我也有一个仓库:
@Repository
public interface OrdersRepository extends JpaRepository<Order, Long> {
@Query("select o from Order o, Customer c where o.customerId = c.id")
Page<Order> searchOrders(final Pageable pageable);
}
该方法有更多用于搜索的参数,但问题是当我发送一个 PageRequest 对象时,排序是 Customer 的一个属性。
例如
Sort sort = new Sort(Sort.Direction.ASC, "c.name");
ordersRepository.search(new PageRequest(x, y, sort));
但是,按 Order 字段排序效果很好:
Sort sort = new Sort(Sort.Direction.ASC, "id");
ordersRepository.search(new PageRequest(x, y, sort));
我得到的错误是 c 不是 Order 的属性(但由于查询是实体的连接,我希望它可以工作)。
Caused by: org.hibernate.QueryException: could not resolve property c of Order
您知道如何按连接实体的字段进行排序吗?
谢谢
【问题讨论】:
标签: jpa spring-boot spring-data spring-data-jpa