使用Spring JPA连接两个表



我有两个实体(Invoice和InvoiceItems(,但没有添加任何关系。

发票

public class Invoice {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long invoiceID;
@Column(name="code")
private String code;
//other columns
}

发票项目

public class InvoiceItems {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long invItemID;
@Column(name="invoice_id")
private Integer invoiceId;
//other columns
}

我可以在不使用JPA添加关系的情况下加入这些实体并获取数据吗?如果不可能,如何使用JPQL或Native查询连接2个实体?

如果您的数据是有效的,那么使用本机查询可以执行

@Query(nativeQuery = true, "select * from Invoice i join InvoiceItems im on i.id = im.invoice_id")
public List<Invoice> findData();

但使用JPA进行无关系联接并不是一个好方法。

是的,您可以加入这些实体并获取数据,而无需使用JPA添加关系,但这有点失去了使用JPA的目的。

您需要首先创建一个java类,它将是从DB返回的数据对象。之后,您可以使用entityManager的createNamedQuery方法来获取结果。

createNamedQuery(String sqlString, ResultClass.Class)

sqlString可能类似于:

SELECT INV.INVOICE_ID
INV.CODE
INV_ITEMS.INV_ITEM_ID
FROM INVOICE INV
JOIN INVOICE_ITEMS INV_ITEMS
ON INV.INVOICE_ID = INV_ITEMS.INVOICE_ID;

以及相应的ResultClass:

public class ResultClass {
private Long invoiceID;
private String code;
private Long invItemID;
// other columns
}

或者,您甚至可以使用RowMapper来映射对象,通过使用JdbcTemplate和query((方法来获得更大的灵活性。

最新更新