我有这些类(class):

@Entity
public class Invoice implements Serializable {
    @Id
    @Basic(optional = false)
    private Integer number;

    private BigDecimal value;

    //Getters and setters
}

@Entity
public class InvoiceItem implements Serializable {
    @EmbeddedId
    protected InvoiceItemPK invoiceItemPk;

    @ManyToOne
    @JoinColumn(name = "invoice_number", insertable = false, updatable = false)
    private Invoice invoice;

    //Getters and setters
}

当我运行此查询时:
session.createQuery("select i from InvoiceItem i").list();

它执行一个查询以从 InvoiceItem 中选择记录,如果我有 10000 个发票项目,它会生成 10000 个附加查询以从每个 InvoiceItem 中选择发票。

我认为如果可以在单个 sql 中获取所有记录会好得多。实际上,我觉得奇怪为什么它不是默认行为。

那么,我该怎么做呢?

最佳答案

试试

session.createQuery("select i from InvoiceItem i join fetch i.invoice inv").list();

它应该使用连接获取单个 SQL 查询中的所有数据。

10-05 19:32