java – Hibernate为@ManyToOne JPA注释属性创建N 1个查询

我有这些课程:

@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查询中的所有数据.

点赞