【问题标题】:Custom Query for fetching data from multiple tables in spring用于在春季从多个表中获取数据的自定义查询
【发布时间】:2021-03-31 13:38:56
【问题描述】:

实体:

@Entity(name = "ap_order_paid")
@Component
public class ApOrderPaid {
        
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
        
    private Long order_number;

    @Transient
    private Long invoiceNumber;
    private Long cheqe_number;

    //getter setter
}
    
public class Orders {
    private long order_number;
    private String invoice_number;
}

我在 mysql 编辑器中运行以下查询,并且正在运行

select
   v.order_number,
   v.id,
   o.invoice_number as invoiceNumber
from ap_order_paid as v, orders o
where v.cheqe_number like '%1234%' and v.order_number = o.order_number

但是当我在带有@Query 注释的 Spring 存储库中运行时,仅不提供 invoice_number 的数据

@Query(value="select v.*, o.invoice_number from ap_order_paid as v, orders o where v.cheqe_number like %?1% and v.order_number = o.order_number", nativeQuery = true)
List<ApOrderPaid> getOrderTaskPaidByCheqNo(String cheqe_number);

【问题讨论】:

  • 可能需要@ManyToOne private Long order_number;

标签: java hibernate spring-data-jpa jpql


【解决方案1】:

将关联映射为@ManyToOne,如下所示:

@Entity(name = "ap_order_paid")
public class ApOrderPaid {
        
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
        
    @ManyToOne(fetch = LAZY)
    @JoinColumn(name = "order_number")
    private Orders order;

    private Long cheqe_number;

    //getter setter
}
    
@Entity
public class Orders {
    @Id
    private long order_number;
    private String invoice_number;
}

并像这样使用 HQL/JPQL 查询:

@Query("select v from ap_order_paid as v join fetch v.order where v.cheqe_number like %?1%")
List<ApOrderPaid> getOrderTaskPaidByCheqNo(String cheqe_number);

【讨论】:

    【解决方案2】:

    您没有在任何列上提到任何类型的 @column 注释。您正在尝试获取“invoiceNumber”,这是一个“瞬态”字段。使用适当的注解,以便休眠能够将 DB 列与实体对象进行映射。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-12
      • 1970-01-01
      • 2013-02-22
      • 1970-01-01
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多