2010-01-13 2 views
1

Предположим, что у меня есть следующие объекты (одна таблица для каждого объекта) с этим отношений: А -> В -> С -> DJPA Hibernate: Как предотвратить соединение при извлечении?

Если я findById экземпляр А, все В, С и D будут возвращены, которые не хочу. Можно ли заставить Hibernate только возвращать A (или только его примитивные свойства)?

Я знаю, что могу написать "SELECT a.x, a.y, a.z, ... FROM A", а затем вручную поместить список результатов в A, но это несколько своевременно, так как я должен вручную заполнить все свойства. Я также проверил все Hibernate query hints, но ничего не сказал.

Mohsen

+0

ваш общий параметр, который необходим в отображении выборки = "присоединиться"? – bertolami

+0

У меня нет свойств, связанных с гибернацией. Мои ассоциации ManyToOne или OneToOne fetch = FetchType.EAGER, что неизбежно, потому что отношения не являются обязательными. – Mohsen

ответ

2

Если у вас есть конструктор А, который заполняет все поля, за исключением тех, которые вы не хотите присоединиться, вы можете выбрать, как это:

SELECT NEW A(a.x, a.y, a.z) FROM A a 
+0

- это особенность Hibernate или JPA? – Mohsen

+0

Это особенность JPA. – Bob

+0

Спасибо за вашу помощь, но таким образом я должен добавить новый конструктор для каждого запроса, который является кошмаром. – Mohsen

2

выбрать a из A a?

также, как вы настроили свои отношения? lazy = "proxy" и fetch = "join"?

+0

настройка lazy = "proxy" и fetch = "join" является глобальной и затрагивает все остальные запросы. Это требование для одного запроса. – Mohsen

+1

Использовать критерии API, если вы хотите указать запрос пользовательских fetchmodes. –

1

Вы можете указать fetch = "select" и lazy = "true" в вашем сопоставлении. Особенно, если ваши отношения - это списки.

+0

У меня есть объект отношения к объекту (нет списка: один к одному или многим к одному, где A - много сторон). установка лени или выборка является глобальной и затрагивает все другие запросы. Это требование для одного запроса. – Mohsen

+0

, если вы используете критерии api, вы можете указать тип выборки. Я не знаю, как/если вы можете сделать это с помощью hql. – bertolami

Смежные вопросы