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

Имеется некий 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
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
    #33804165
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
совет: EJB2.x ап стену.
точно знаю, что у меня такое работало (на DB2). попробую найти в старых сырцах
...
Рейтинг: 0 / 0
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
    #33805473
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Триггер напиши. Типа если пытаемся инсертить NULL, то заменяем его на что-нибудь другое.

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

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

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

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

дистанция от дома до работы для исходников просто непреодолима...
...
Рейтинг: 0 / 0
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
    #33811201
_Chester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как раз именно 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
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
    #33812736
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это для гипесонека (исходники с 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
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
    #33813112
Kachalov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема видимо с CMP компонентом :)
Может ссылка поможет
...
Рейтинг: 0 / 0
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
    #33819232
_Chester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
    #33820073
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_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
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
    #33820585
expp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторexpp, почему столько нареканий в адрес EJB 2.0
бу-го-га!!! потому, что это мёртворождённый жупел. Как ты понял я имел достаточный experince в 2.x, несмотря на это, потважился похерить их и перетащить проекту на ещё сырые ejb3.0.
теперь серьёзно. добавлять к session bean ам (читай COM объектам) состояние для того что бы получить entity bean было заблуждением афтароф спецификации. для заделывания этой дыры используются DTO с фасадом. кто видел entity с remote интерфейсом??? (это не я придумал, а прочитал на форуме tss).
ну а про XML dd
...
Рейтинг: 0 / 0
EJB 2.0 EntityBean + ссылка на автоинкрементное поле
    #33821245
_Chester
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм... как-то не привычно слышать о том что session beans ипользуются реже чем entity beans. Доводилось видеть несколько проектов (не маленьких) - 90% реализовано на session stateless beans. Правда еще EJB 1.1

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

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

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

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


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