【发布时间】:2016-05-30 02:17:44
【问题描述】:
您好,我正在尝试为我工作的公司制作订单跟踪系统。
目前我需要在启动时从我的 mySQL 数据库加载 PO 实体,这些 PO 实体的发票为空或非“已交付”状态(枚举)。
我的实体如下
@Entity
public class PO {
@Id
@GeneratedValue
private Long id;
@Column(name = "Customer", nullable = false)
private String customer;
@Column(name = "PO_number", nullable = false)
private String PONUMBER;
@OneToMany(mappedBy = "po",cascade = CascadeType.PERSIST,fetch = FetchType.EAGER)
private List<CatogeryEntires> poCatogories = new ArrayList<>();
@Column(name = "entered_on", nullable = false)
private LocalDateTime entryDate;
@Column(name = "Delivery_Date", nullable = false)
private LocalDate dd;
@Transient
private ObjectProperty<LocalDate> deliveryDate;
@Column(name = "Deliver_Before", nullable = false)
private LocalTime dt;
@Transient
private ObjectProperty<LocalTime> deliveryTime;
@Entity
public class CatogeryEntires {
@Id
@GeneratedValue
private Long id;
@Enumerated(EnumType.STRING)
private PO_CATOGERY poCatogery;
@ManyToOne
@JoinColumn(name = "po_id", nullable = false)
private PO po;
@OneToMany(mappedBy = "catogeryEntries", cascade = CascadeType.PERSIST)
private Set<Invoice> invoices = new HashSet<>();
@Entity
public class Invoice {
@Id
@GeneratedValue
private Long id;
private int invoiceNumber;
@Column(name = "delivered_on", nullable = true)
private LocalDateTime deliveredOn;
@Enumerated(EnumType.STRING)
@Column(name = "status", nullable = true)
private InvoiceStatus invoiceStatus;
@ManyToOne
@JoinColumn(name = "catogery_entry_id")
private CatogeryEntires catogeryEntries;
我目前在我的数据库中使用以下本机 SQL 语句来获得所需的结果
SELECT po_app.po.id,Customer,PO_number,Delivery_Date,Deliver_Before ,poCatagery,invoiceNumber,状态
FROM(po_app.po left join po_app.catogeryentires on po.id = catogeryentires.po_id)
LEFT JOIN po_app.invoice on catogeryentires.id = invoice.catogery_entry_id
WHERE 状态为 null 或 status != 'DELIVERED';
我不知道通过 JPQL 复制它 我尝试阅读参考书,例如:Java persistence and hibernate 2nd editions”,但仍然没有运气。
【问题讨论】: