Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring:如何从JPA中的两个表中获取数据_Java_Mysql_Spring_Spring Data Jpa_Jpql - Fatal编程技术网

Java Spring:如何从JPA中的两个表中获取数据

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>

在下面的代码中,我想从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> 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);
     }