@OneToOne охотно выбирается, когда объект с @OneToOne выбирается соединением - PullRequest
0 голосов
/ 24 августа 2018

У меня есть следующие 3 класса:

public class Object {
    ...whatever
}

public class CustomerObject {

    @OneToOne(optional = false, fetch = FetchType.LAZY)
    @JoinColumn(name = "OBJECT_ID", referencedColumnName = "OBJECT_ID", insertable = false, updatable = false)  
    private Object object;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CUSTOMER_TYPE_ID", referencedColumnName = "OBJECT_ID", insertable = false, updatable = false)
    private CustomerTypeObject customerTypeObject;

}

public class CustomerTypeObject {

    @JoinColumn(name = "OBJECT_ID", referencedColumnName = "OBJECT_ID", insertable = false, updatable = false)
    @OneToOne(optional = false, fetch = FetchType.LAZY)
    private Object object;

}

Когда я делаю это:

entityManager.createQuery(
"select cust from CustomerObject cust "
+ "left join fetch cust.customerTypeObject customerType "
+ "where cust.id = :customer_id 
, CustomerObject.class)
.setParameter("customer_id", BigDecimal.valueOf(1))
.getSingleResult();

Hibernate выдает 1 запрос, чтобы получить клиента с его customerType, но затем он также выдает запрос, чтобы получить объектную ассоциацию в объекте CustomerTypeObject. Проблема устранена (то есть выполнен только один запрос) путем объединения, извлекающего эту связь:

entityManager.createQuery(
"select cust from CustomerObject cust "
+ "left join fetch cust.customerTypeObject customerType "
+ "left join fetch customerType.object customerTypeObject "
+ "where cust.id = :customer_id 
, CustomerObject.class)
.setParameter("customer_id", BigDecimal.valueOf(1))
.getSingleResult();

но я не хочу этого делать. Нет ли способа сделать это? (т. е. не нужно охотно извлекать ассоциацию OneToOne в сущности, которая уже соединена, извлекается в запросе).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...