我有一个名为“ 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;
}
我必须从具有至少一个“ OrderLine”且状态低于特定值(例如1000,表示它们处于“ OPEN”状态)的特定locationId中获取所有订单。
我可以先获取一个位置的所有订单,然后根据所需的状态条件对其进行过滤。但这意味着我将必须获取该位置的所有订单,即使是已关闭的订单,也可能对性能不利。
有没有一种方法可以使用Spring Data JPA或Criteria API直接从数据库中获取所需的对象?
我正在使用SQL Server作为数据库。
我必须进行一些更改,但这应该适用于Spring Data JPA。首先,将密钥从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);
}