Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / EJB 2.0 EntityBean + ссылка на автоинкрементное поле / 15 сообщений из 15, страница 1 из 1
20.06.2006, 22:16
    #33804036
_Chester
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
Добрый день!
Не подскажет ли кто как побороть следующую проблемку:

Имеется некий EntityBean, Customer одним из полей котороя является поле отношения, т.е. foreign-key на поле другого EntityBean Address . При чем primary-key в таблице ADDRESS является автоинкрементным полем.

Теперь собсно суть проблемы:
При попытке создать новый обьект Address (нечто вроде
Код: plaintext
addressHome.create()
) JBOSS ругается следующим образом:

[IBM][CLI Driver][DB2/NT] SQL0798N Нельзя задавать значение для столбца "ID", который определен как GENERATED ALWAYS. SQLSTATE=428C9

Если же поле сделать обычным а не автоинкрементным, то ошибка такая:

[IBM][CLI Driver][DB2/NT] SQL0407N Пустое значение (NULL) невозможно присвоить столбцу "TBSPACEID=2, TABLEID=4, COLNO=0", определенному как не допускающий пустых значений. SQLSTATE=23502

фрагмент деплоймент-дескриптора:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 <relationships >
      <ejb-relation >
         <ejb-relation-name>Customer-Address</ejb-relation-name>

         <ejb-relationship-role >
            <ejb-relationship-role-name>Customer-has-an-Address</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source >
               <ejb-name>Customer</ejb-name>
            </relationship-role-source>
            <cmr-field >
               <cmr-field-name>homeAddress</cmr-field-name>
            </cmr-field>
         </ejb-relationship-role>

         <ejb-relationship-role >
            <ejb-relationship-role-name>Address-belongs-to-Customer</ejb-relationship-role-name>
            <multiplicity>One</multiplicity>
            <relationship-role-source >
               <ejb-name>Address</ejb-name>
            </relationship-role-source>
         </ejb-relationship-role>

      </ejb-relation>
        <!-- 
          To add relationships  for  beans not managed by XDoclet, add
          a file to your XDoclet merge directory called relationships.xml that contains
          the <ejb-relation></ejb-relation> markups  for  those beans.
        --> 
   </relationships>
...
Рейтинг: 0 / 0
21.06.2006, 03:21
    #33804165
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
совет: EJB2.x ап стену.
точно знаю, что у меня такое работало (на DB2). попробую найти в старых сырцах
...
Рейтинг: 0 / 0
21.06.2006, 13:44
    #33805473
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
Триггер напиши. Типа если пытаемся инсертить NULL, то заменяем его на что-нибудь другое.

======================
- Я подхожу к клетке с медведем панда...
Видите, какие у него черные круги под глазами?!
Медведь панда как бы всем своим видом говорит нам: "Не бухайте!"
======================
...
Рейтинг: 0 / 0
21.06.2006, 22:43
    #33807182
_Chester
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
Триггер, увы, не подходит.
Скорее всего проблема в том, что не зависимо от того, автоинкрементное поле или нет - JBOSS пытается втиснуть туда какое-то значение,точнее NULL.
То есть, первый раз ишибка говорит о том что нельзя самому записывать значения в автоинкрементные поля, а во втором - нельзя записать NULL в поле, обьявленное как NOT NULL. То есть, думаю что есть смысл немного префразировать вопрос :

Чего надо добавить в деплоймент-дескриптор, для того что-бы JBOSS (или любой другой контейнер) не пытался втиснуть значение в автоинкрементное поле?

expp , откопал исходники???
...
Рейтинг: 0 / 0
22.06.2006, 02:34
    #33807327
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
откопать, то откопал. да жена забрала плееер который служит флешкой. поэтому на работу их не принёс.
автоинкремент работал без б. ты в create() Ничего в id не пишешь?. а id-генератор DB2 указал?
...
Рейтинг: 0 / 0
22.06.2006, 21:52
    #33810143
_Chester
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
В ID ничего не пишу - 100%.
Скорее всего, помимо ejb-jar.xml, нужно добавить нечто специфичное в jboss.xml или в jbosscmp-jdbc.xml

...She gave me something, it was a mushroom...
...
Рейтинг: 0 / 0
23.06.2006, 02:17
    #33810274
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
ты что всё руками пишешь? Xdoclet'ы не юзамши?
без vendor specific deployment descriptor ни палучица ни чё.
в Xdoclet указывается Id-генератор для DB2, он пишется в jbosscmp-jdbc.xml.

дистанция от дома до работы для исходников просто непреодолима...
...
Рейтинг: 0 / 0
23.06.2006, 12:59
    #33811201
_Chester
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
Как раз именно XDoclet'ом и пользуюсь:

Перед абстрактным методом getId()
есть такая инструкция:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
/**
 *
 *
....
 * @jboss.persistence auto-increment="true"
....
*/

и в jbosscmp-jdbc.xml или в jboss.xml (точно не помню - исходники дома) присутсвует тег в описании свойств поля ID, нечто вроде <auto-increment/>

...She gave me something, it was a mushroom...
...
Рейтинг: 0 / 0
24.06.2006, 02:32
    #33812736
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
это для гипесонека (исходники с DB2 лежат дальше)

jbosscmp-jdbc.xml:
Код: plaintext
1.
2.
3.
4.
5.
6.
    <entity>
         <ejb-name>Way</ejb-name>
         <table-name>ways</table-name>
         ....
	<entity-command name="hsqldb-fetch-key">
	</entity-command>
исходнег:
Код: plaintext
1.
@jboss.entity-command name = "hsqldb-fetch-key" 

для DB2 отличие в том, что нужно указать класс генератора
который не упомянут в доке, но есть в пакете org.jboss.ejb.plugins.cmp.jdbc
(ищи в jar'ах jboss'a)

и забей на 2.x этташ ужац. ну и если есть возможность отплеваться от DB2 имхо то её туда же. попробуй Derby - это ibm овский микроdb2 на жаби.
...
Рейтинг: 0 / 0
24.06.2006, 20:42
    #33813112
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
Проблема видимо с CMP компонентом :)
Может ссылка поможет
...
Рейтинг: 0 / 0
28.06.2006, 14:08
    #33819232
_Chester
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
expp, Kachalov - большое вам спасибо!
Действительно, все решилось с помощью:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
/**
*
...
* @jboss.unknown-pk class="java.lang.Integer"
 * 			jdbc-type="INTEGER"
 * 			sql-type="INTEGER"
 * 			column-name="ID"
 * 			auto-increment="true"
 * @jboss.entity-command name="key-generator"
 * 			class="org.jboss.ejb.plugins.cmp.jdbc.keygen.JDBCDB2IdentityValLocalCreateCommand"
 * 
 ...
*/

org.jboss.ejb.plugins.cmp.jdbc.keygen.JDBCDB2IdentityValLocalCreateCommand - класс для DB2

P.S.
expp , почему столько нареканий в адрес EJB 2.0? Я эту технологию только начал изучать, ну и невольно начала задаваться вопросом почему ее так критикуют? Просвяти...
...She gave me something, it was a mushroom...
...
Рейтинг: 0 / 0
28.06.2006, 17:58
    #33820073
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
_ChesterP.S.
expp , почему столько нареканий в адрес EJB 2.0? Я эту технологию только начал изучать, ну и невольно начала задаваться вопросом почему ее так критикуют? Просвяти...
...She gave me something, it was a mushroom...
ИМХО:
Во-первых на носу спецификация 3.0, во-вторых, она (EJB 2.0 spec) довольно сложная по сравнению с существующими ныне ORM-средствами. Правда EJB не ограничивается простым ORM, но Session Beans, а тем более Message Driven Beans используются гораздо реже, чем Entity Beans.
...
Рейтинг: 0 / 0
29.06.2006, 02:22
    #33820585
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
авторexpp, почему столько нареканий в адрес EJB 2.0
бу-го-га!!! потому, что это мёртворождённый жупел. Как ты понял я имел достаточный experince в 2.x, несмотря на это, потважился похерить их и перетащить проекту на ещё сырые ejb3.0.
теперь серьёзно. добавлять к session bean ам (читай COM объектам) состояние для того что бы получить entity bean было заблуждением афтароф спецификации. для заделывания этой дыры используются DTO с фасадом. кто видел entity с remote интерфейсом??? (это не я придумал, а прочитал на форуме tss).
ну а про XML dd
...
Рейтинг: 0 / 0
29.06.2006, 11:43
    #33821245
_Chester
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
Хм... как-то не привычно слышать о том что session beans ипользуются реже чем entity beans. Доводилось видеть несколько проектов (не маленьких) - 90% реализовано на session stateless beans. Правда еще EJB 1.1

(похоже, посты начинают выходить за рамки темы :) )

...She gave me something, it was a mushroom...
...
Рейтинг: 0 / 0
30.06.2006, 02:51
    #33823075
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
>>не привычно слышать о том что session beans ипользуются реже чем entity beans

наверное меня не правильно поняли. ну и номальный дизайн: "куча сущностей+фасад"

>>(похоже, посты начинают выходить за рамки темы :) )
да, посты просто не видят ни краёв не берегов
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / EJB 2.0 EntityBean + ссылка на автоинкрементное поле / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]