У меня есть эти классы:Hibernate создания ненужных запросов для @ManyToOne аннотированный недвижимости
@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. На самом деле я нахожу это странным, почему это не поведение по умолчанию.
Итак, как я могу это сделать?
Ну, на самом деле это нормально работает, но есть ли способ сделать это, используя аннотации? Потому что, допустим, у нас есть много аннотированных полей @ManyToOne, я не хочу писать много JOIN FETCH XXX, чтобы избежать проблемы ... –
Hibernate имеет аннотацию '@ Fetch', которую вы можете использовать, @Fetch (FetchMode.JOIN) 'на вашем сопоставлении отношений. –
Даже используя '@Fetch (FetchMode.JOIN)' он по-прежнему создает дополнительные запросы. Полагаю, мне придется работать с исправлением запроса. –