Java Spring:如何从JPA中的两个表中获取数据
在下面的代码中,我想从Order表和User表中获取数据,如何修改查询以实现这一点?用户id是订单表中的外键Java Spring:如何从JPA中的两个表中获取数据,java,mysql,spring,spring-data-jpa,jpql,Java,Mysql,Spring,Spring Data Jpa,Jpql,在下面的代码中,我想从Order表和User表中获取数据,如何修改查询以实现这一点?用户id是订单表中的外键 public interface OrderRepository extends JpaRepository<Order, Long> { @Query("Select o from Order o where o.customer.id= :customerId and o.orderStatus='DELIVERED'") List<Order>
public interface OrderRepository extends JpaRepository<Order, Long> {
@Query("Select o from Order o where o.customer.id= :customerId and o.orderStatus='DELIVERED'")
List<Order> orderHistory(@Param("customerId") long customerId);
}
要通过订单获取客户,请执行join-fetch JOIN FETCH表达式不是常规联接,也没有定义联接变量。它的唯一用途是指定应该从数据库中获取的相关对象,这些对象的查询结果在同一个往返过程中。使用此查询可以提高对结果国家/地区对象的迭代效率,因为它不需要单独检索关联的资本对象。
是否要将customerId和order字段放入参数? 我认为在params中列出顺序字段就足够了。
当然,sql语句必须是正确的。我们如何知道这两个类之间的关系?JPA和JPQL使用类而不是表。为什么内部联接和左联接可能重复?以加载使用内部联接的订单的客户。不确定您的架构用户对于订单是否是必需的,因此使用了左联接。如果您的订单表始终具有用户id,请将左联接更改为内部联接。
public interface OrderRepository extends JpaRepository<Order, Long> {
@Query("Select o from Order o inner join fetch o.customer as customer left join fetch o.user as user where customer.id= :customerId and o.orderStatus='DELIVERED'")
List<Order> orderHistory(@Param("customerId") long customerId);
}