Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Relationships между EJB, требуется настроить связи между EJB 
:(
    Опции темы
iv20052
Дата 13.5.2010, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.5.2010

Репутация: нет
Всего: нет



Добрый день!

Пытаюсь связать 2 Entity (cmp) бина с помощью механизма Relationship.
При запросе из клиентского приложения через Session Bean (IDE-JDeveloper) простейшей выборки -  выдает ошибки типа:

10/05/13 10:41:28  Error getting employees in dept : 50 javax.ejb.EJBException: nested exception is: javax.ejb.EJBException: Database error: ORA-00904: "HR"."EMPLOYEES"."MANAGER_ID": недопустимый идентификатор
; nested exception is: java.sql.SQLException: ORA-00904: "HR"."EMPLOYEES"."MANAGER_ID": недопустимый идентификатор

2 DTO (для каждого Entity бина соответственно) сгенерировал сам JDeveloper. Исходник сессионного бина (содержащий нерабочий метод getEmployeesInDept(Long deptno)), запрашивающего связанные(?) сущности привожу:

Код

package mypackage1;
import java.util.*;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class EmpdeptSessionBean implements SessionBean 
{


public Collection getEmployeesInDept(Long deptno) 
  {
    Collection returnColl = new ArrayList();
    try {
    DepartmentsLocal dept = this.getDepartmentsLocalHome().findByPrimaryKey(deptno);
    
    Collection empColl = dept.getEmployees_departmentId();
    Iterator empIter = empColl.iterator();
    while(empIter.hasNext()) 
    {
      EmployeesLocalDTO empDTO = new EmployeesLocalDTO();
      EmployeesLocal empBean = (EmployeesLocal)empIter.next();
      empDTO.setEmployeeId(empBean.getEmployeeId());
      empDTO.setFirstName(empBean.getFirstName());
      empDTO.setLastName(empBean.getLastName());
      returnColl.add(empDTO);
    }
    } catch(Exception ex) 
    {
      System.out.println(" Error getting employees in dept : "+deptno+" "+ex);
    }
    return returnColl;
  }
  
 public Long getDepartmentID(Long empno)
  {
  Long deptno=new Long(0);
    try
    {
      EmployeesLocal emp =this.getEmployeesLocalHome().findByPrimaryKey(empno);
       deptno = emp.getDepartments_departmentId().getDepartmentId();
   
    }
    catch(Exception ex)
    {
      System.out.println(" Error getting the department_id of employee ");
    }
    return deptno;
  }
  
  
  public void ejbCreate()
  {
  }

  public void ejbActivate()
  {
  }

  public void ejbPassivate()
  {
  }

  public void ejbRemove()
  {
  }

  public void setSessionContext(SessionContext ctx)
  {
  }

  private EmployeesLocalHome getEmployeesLocalHome() throws NamingException
  {
    final InitialContext context = new InitialContext();
    return (EmployeesLocalHome)context.lookup("java:comp/env/ejb/local/Employees");
  }

  private DepartmentsLocalHome getDepartmentsLocalHome() throws NamingException
  {
    final InitialContext context = new InitialContext();
    return (DepartmentsLocalHome)context.lookup("java:comp/env/ejb/local/Departments");
  }
}


Добрые люди, подскажите где ошибся? В чем был неправ?....
 

PM MAIL   Вверх
AntonSaburov
Дата 13.5.2010, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Штурман
****


Профиль
Группа: Модератор
Сообщений: 5658
Регистрация: 2.7.2002
Где: Санкт-Петербург

Репутация: 8
Всего: 118



Думаю, что проблема в описании твоих EntityBean
Цитата(iv20052 @  13.5.2010,  11:30 Найти цитируемый пост)
nested exception is: java.sql.SQLException: ORA-00904: "HR"."EMPLOYEES"."MANAGER_ID": недопустимый идентификатор

Похоже разрешить проблему с таблицами не получается. Может надо посмотреть как раз ejb-jar.xml ?
PM MAIL WWW ICQ   Вверх
iv20052
Дата 14.5.2010, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 13.5.2010

Репутация: нет
Всего: нет



содержимое ejb-jar.xml предоставляю, но мне кажется что связь не работает потому, что в базовой таблице EMPLOYEES два поля MANAGER_ID и DEPARTMENT_ID (на которые и указывает исключение) НЕ НАХОДЯТСЯ(!!!) в состоянии NOT NULL....может ли это быть причиной моей головной боли?


а теперь содержимое ejb-jar.xml:

Код

<?xml version = '1.0' encoding = 'windows-1252'?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
<ejb-jar>
  <enterprise-beans>
    <session>
      <description>Session Bean ( Stateless )</description>
      <display-name>EmpdeptSession</display-name>
      <ejb-name>EmpdeptSession</ejb-name>
      <home>mypackage1.EmpdeptSessionHome</home>
      <remote>mypackage1.EmpdeptSession</remote>
      <ejb-class>mypackage1.EmpdeptSessionBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
      <ejb-local-ref>
        <ejb-ref-name>ejb/local/Employees</ejb-ref-name>
        <ejb-ref-type>Entity</ejb-ref-type>
        <local-home>mypackage1.EmployeesLocalHome</local-home>
        <local>mypackage1.EmployeesLocal</local>
        <ejb-link>Employees</ejb-link>
      </ejb-local-ref>
      <ejb-local-ref>
        <ejb-ref-name>ejb/local/Departments</ejb-ref-name>
        <ejb-ref-type>Entity</ejb-ref-type>
        <local-home>mypackage1.DepartmentsLocalHome</local-home>
        <local>mypackage1.DepartmentsLocal</local>
        <ejb-link>Departments</ejb-link>
      </ejb-local-ref>
    </session>
    <entity>
      <description>Entity Bean ( CMP )</description>
      <display-name>Departments</display-name>
      <ejb-name>Departments</ejb-name>
      <local-home>mypackage1.DepartmentsLocalHome</local-home>
      <local>mypackage1.DepartmentsLocal</local>
      <ejb-class>mypackage1.DepartmentsBean</ejb-class>
      <persistence-type>Container</persistence-type>
      <prim-key-class>java.lang.Long</prim-key-class>
      <reentrant>False</reentrant>
      <cmp-version>2.x</cmp-version>
      <abstract-schema-name>Departments</abstract-schema-name>
      <cmp-field>
        <field-name>departmentId</field-name>
      </cmp-field>
      <cmp-field>
        <field-name>departmentName</field-name>
      </cmp-field>
      <cmp-field>
        <field-name>locationId</field-name>
      </cmp-field>
      <primkey-field>departmentId</primkey-field>
      <query>
        <query-method>
          <method-name>findAll</method-name>
          <method-params/>
        </query-method>
        <ejb-ql>select object(o) from Departments o</ejb-ql>
      </query>
    </entity>
    <entity>
      <description>Entity Bean ( CMP )</description>
      <display-name>Employees</display-name>
      <ejb-name>Employees</ejb-name>
      <local-home>mypackage1.EmployeesLocalHome</local-home>
      <local>mypackage1.EmployeesLocal</local>
      <ejb-class>mypackage1.EmployeesBean</ejb-class>
      <persistence-type>Container</persistence-type>
      <prim-key-class>java.lang.Long</prim-key-class>
      <reentrant>False</reentrant>
      <cmp-version>2.x</cmp-version>
      <abstract-schema-name>Employees</abstract-schema-name>
      <cmp-field>
        <field-name>employeeId</field-name>
      </cmp-field>
      <cmp-field>
        <field-name>firstName</field-name>
      </cmp-field>
      <cmp-field>
        <field-name>lastName</field-name>
      </cmp-field>
      <cmp-field>
        <field-name>email</field-name>
      </cmp-field>
      <cmp-field>
        <field-name>phoneNumber</field-name>
      </cmp-field>
      <cmp-field>
        <field-name>hireDate</field-name>
      </cmp-field>
      <cmp-field>
        <field-name>jobId</field-name>
      </cmp-field>
      <cmp-field>
        <field-name>salary</field-name>
      </cmp-field>
      <cmp-field>
        <field-name>commissionPct</field-name>
      </cmp-field>
      <primkey-field>employeeId</primkey-field>
      <query>
        <query-method>
          <method-name>findAll</method-name>
          <method-params/>
        </query-method>
        <ejb-ql>select object(o) from Employees o</ejb-ql>
      </query>
    </entity>
  </enterprise-beans>
  <relationships>
    <ejb-relation>
      <ejb-relation-name>Employees - Departments</ejb-relation-name>
      <ejb-relationship-role>
        <ejb-relationship-role-name>Employees may have one Departments</ejb-relationship-role-name>
        <multiplicity>Many</multiplicity>
        <relationship-role-source>
          <ejb-name>Employees</ejb-name>
        </relationship-role-source>
        <cmr-field>
          <cmr-field-name>departments_departmentId</cmr-field-name>
        </cmr-field>
      </ejb-relationship-role>
      <ejb-relationship-role>
        <ejb-relationship-role-name>Departments may have many Employees</ejb-relationship-role-name>
        <multiplicity>One</multiplicity>
        <relationship-role-source>
          <ejb-name>Departments</ejb-name>
        </relationship-role-source>
        <cmr-field>
          <cmr-field-name>employees_departmentId</cmr-field-name>
          <cmr-field-type>java.util.Collection</cmr-field-type>
        </cmr-field>
      </ejb-relationship-role>
    </ejb-relation>
    <ejb-relation>
      <ejb-relation-name>Departments - Employees</ejb-relation-name>
      <ejb-relationship-role>
        <ejb-relationship-role-name>Departments may have one Employees</ejb-relationship-role-name>
        <multiplicity>Many</multiplicity>
        <relationship-role-source>
          <ejb-name>Departments</ejb-name>
        </relationship-role-source>
        <cmr-field>
          <cmr-field-name>employees_managerId</cmr-field-name>
        </cmr-field>
      </ejb-relationship-role>
      <ejb-relationship-role>
        <ejb-relationship-role-name>Employees may have many Departments</ejb-relationship-role-name>
        <multiplicity>One</multiplicity>
        <relationship-role-source>
          <ejb-name>Employees</ejb-name>
        </relationship-role-source>
        <cmr-field>
          <cmr-field-name>departments_managerId</cmr-field-name>
          <cmr-field-type>java.util.Collection</cmr-field-type>
        </cmr-field>
      </ejb-relationship-role>
    </ejb-relation>
    <ejb-relation>
      <ejb-relation-name>Employees - Employees</ejb-relation-name>
      <ejb-relationship-role>
        <ejb-relationship-role-name>Employees may have one Employees</ejb-relationship-role-name>
        <multiplicity>Many</multiplicity>
        <relationship-role-source>
          <ejb-name>Employees</ejb-name>
        </relationship-role-source>
        <cmr-field>
          <cmr-field-name>employees_managerId</cmr-field-name>
        </cmr-field>
      </ejb-relationship-role>
      <ejb-relationship-role>
        <ejb-relationship-role-name>Employees may have many Employees</ejb-relationship-role-name>
        <multiplicity>One</multiplicity>
        <relationship-role-source>
          <ejb-name>Employees</ejb-name>
        </relationship-role-source>
        <cmr-field>
          <cmr-field-name>employees_managerId_1</cmr-field-name>
          <cmr-field-type>java.util.Collection</cmr-field-type>
        </cmr-field>
      </ejb-relationship-role>
    </ejb-relation>
  </relationships>
  <assembly-descriptor>
    <container-transaction>
      <method>
        <ejb-name>Departments</ejb-name>
        <method-name>*</method-name>
      </method>
      <trans-attribute>Supports</trans-attribute>
    </container-transaction>
    <container-transaction>
      <method>
        <ejb-name>Employees</ejb-name>
        <method-name>*</method-name>
      </method>
      <trans-attribute>Supports</trans-attribute>
    </container-transaction>
    <container-transaction>
      <method>
        <ejb-name>EmpdeptSession</ejb-name>
        <method-name>*</method-name>
      </method>
      <trans-attribute>Required</trans-attribute>
    </container-transaction>
  </assembly-descriptor>
</ejb-jar>


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0446 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.