Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > EJBQL - сложные классы в параметрах


Автор: Maverick 21.2.2007, 18:19
Уважаемые...

можно ли в EJBQL использовать в качестве параметров не только примитивы, а еще и свои классы...? Я вот в NetBeans 5.5 при помощи визарда формирую запрос - так он мне услужливо предлагает мои собственные классы... конечно, при развертывании ошибку выдает... но чутье мне подсказывает, что это возможно....

Например в качестве параметра хочу передать класс Country (поля Integer id, String code, String name )

Запрос как будет выглядеть?

Код

SELECT OBJECT(o) 
FROM CountryEJB o 
WHERE o=?1


так не работает.. а как надо?

Автор: tux 21.2.2007, 18:33
Цитата

An input parameter can be a primitive type of byte, short, int, long, float, double, boolean, char or wrapper types of Byte, Short, Integer, Long, Float, Double, BigDecimal, String, Boolean, Char, java.util.Calendar, java.sql.Date, java.sql.Time, java.sql.Timestamp or an EJBObject.

Цитата отсюда - http://publib.boulder.ibm.com/infocenter/adiehelp/index.jsp?topic=/com.ibm.etools.ejb.doc/topics/recfparm.html.

Автор: Maverick 21.2.2007, 18:49
а чего же тогда визард предлагает другие классы? провокация от создателей NetBeans5.5? Да и сервер не жалуется на класс, а жалуется на оператор "="...   smile 

Автор: tux 21.2.2007, 19:04
Цитата(Maverick @  21.2.2007,  18:49 Найти цитируемый пост)
а чего же тогда визард предлагает другие классы? провокация от создателей NetBeans5.5?

Ничего не могу сказать по этому поводу.

Цитата(Maverick @  21.2.2007,  18:49 Найти цитируемый пост)
Да и сервер не жалуется на класс, а жалуется на оператор "="...  

Ну вероятно просто операция сравнения для класса в EJB-QL не определена. А вообще как ты себе представляешь такое сравнение? С примитивными типами все понятно, с EJB тоже - можно сравнить первичные ключи, собственно, так и делается. А как сравнить обычный бин с чем-то там в запросе? Запрос на EJB-QLтранслируется в SQL, вот каким образом контейнер должен узнать как сравнивать CountryEJB и Country, он то не знает где у Country первичный ключ.

Автор: Maverick 26.2.2007, 13:14
пусть по всем полям сравнивает...  

Автор: tux 26.2.2007, 13:56
Цитата(Maverick @  26.2.2007,  13:14 Найти цитируемый пост)
пусть по всем полям сравнивает...   

Ну хорошо, а как определить поля, по которым нужно сравнивать? Для простых типов более-менее все ясно. А если это тип составной? Предположим, есть EJB-бин, представляющий государство, с ним связаны EJB регионов, с ним в свою очередь EJB населенных пунктов и т.д. Так вот до какого уровня вложенности сравнивать населенные пункты? Вытягивать из базы все регионы и государства и сравнивать, что есть в EJB и в обычном бине? А если начать не с населенных пунктов, а с объектов, представляющих людей, например? 

Впрочем, философствовать можно много. Спроси на http://forum.java.sun.com/index.jspa, получишь точный ответ, возможно от тех, кто разрабатывает стандарт EJB.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)