gpt4 book ai didi

java - 如何根据父对象和子对象的属性获取一对多关联对象

转载 作者:行者123 更新时间:2023-12-01 16:34:40 25 4
gpt4 key购买 nike

我有一个名为“Order”的父对象,它有许多名为“OrderLines”的子对象。

@Entity
@Table(name = "ORDER")
class Order {
@Id
@Column(name = "order_number")
String orderId;

@Column(name = "location_id")
String locationId;
}

@Entity
@Table(name = "ORDER_LINES")
public class FulfilmentOrderLines {

@ManyToOne(optional = false)
@Id
@JoinColumn(name = "order_number")
private Order orderNumber;

@Id
@Column(name = "order_line_number", nullable = false)
private String orderLineNumber;

@Column(name = "status")
private int status;
}

我必须从特定 locationId 中获取所有订单,该 locationId 至少有一个状态低于特定值的“OrderLine”(例如 1000,表示这些订单处于“OPEN”状态)。

我可以先获取某个位置的所有订单,然后根据所需的状态标准对其进行过滤。但这意味着我将必须获取该位置的所有订单,甚至是已关闭的订单,这可能会降低性能。

有没有办法可以使用 Spring Data JPA 或 Criteria API 直接从数据库获取所需的对象?

我使用 SQL Server 作为数据库。

最佳答案

我必须进行一些更改,但这应该适用于 Spring Data JPA。首先,将 key 从 FulfilmentOrderLines 移出到其自己的对象中以创建嵌入式 ID。

@Embeddable
public class FulfilmentOrderLinesKey implements Serializable {

@ManyToOne(optional = false)
@JoinColumn(name = "order_number")
private Order orderNumber;

@Column(name = "order_line_number", nullable = false)
private String orderLineNumber;
}

然后更新 FulfilmentOrderLines 以引用它。

@Entity
@Table(name = "ORDER_LINES")
public class FulfilmentOrderLines {

@EmbeddedId
private FulfilmentOrderLinesKey key;

@Column(name = "status")
private int status;
}

然后您可以添加一个存储库,其中包含返回您要查找的内容的方法。

@Repository
public interface FulfilmentOrderLinesRepository extends JpaRepository<FulfilmentOrderLines, FulfilmentOrderLinesKey> {

List<FulfilmentOrderLines> findAllByKeyOrderNumberLocationIdAndStatus(String locationId, int status);
}

关于java - 如何根据父对象和子对象的属性获取一对多关联对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61985139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com