hibernate не использует предложение where с внутренним соединением - PullRequest
1 голос
/ 11 июня 2009

Вот выдержка из моего кода (я использую XDoclet):

/**
 * @hibernate.class table="WIP_DISCRETE_JOBS"
 */
public class WipDiscreteJob extends AuditedObject
{
  private WipDiscreteJobStatus status;

  /**
   * @hibernate.many-to-one column="STATUS_TYPE"
   */
  public WipDiscreteJobStatus getStatus()
  {
    return status;
  }
}

/**
 * @hibernate.class
 *   table="apps.mfg_lookups"
 *   where="lookup_type = 'WIP_JOB_STATUS'"
 */
public class WipDiscreteJobStatus extends ManufacturingLookup
{
  /**
   * @hibernate.id column="LOOKUP_CODE"
   *   generator-class="assigned"
   */
  public Long getId()
  {
    return this.id;
  }

}

А вот некоторые определения базы данных:

APPS.MFG_LOOKUP (view)
Column Name  Pk  Data Type            Null?
LOOKUP_TYPE      VARCHAR2 (30 Byte)   N
LOOKUP_CODE      NUMBER               Y

WIP_DISCRETE_JOBS
Column Name  Pk  Data Type            Null?
STATUS_TYPE  N   NUMBER               Yes       

Когда я запрашиваю WipDiscreteJob и пытаюсь получить счетчик результатов (с использованием критериев), SQL, отчасти, выглядит как

select count(*) as y0_ 
from WIP_DISCRETE_JOBS this_ 
inner join apps.mfg_lookups       wipdiscret2_ on this_.STATUS_TYPE=wipdiscret2_.LOOKUP_CODE 
inner join WIP_ENTITIES           wipentity1_  on this_.WIP_ENTITY_ID=wipentity1_.WIP_ENTITY_ID 
inner join WIP_SCHEDULE_GROUPS    wipschedul4_ on this_.SCHEDULE_GROUP_ID=wipschedul4_.SCHEDULE_GROUP_ID 
inner join INV.MTL_SYSTEM_ITEMS_B item3_       on this_.PRIMARY_ITEM_ID=item3_.INVENTORY_ITEM_ID and this_.ORGANIZATION_ID=item3_.ORGANIZATION_ID 
where wipentity1_.WIP_ENTITY_NAME is not null
  and wipdiscret2_.LOOKUP_CODE=3 
  and item3_.PLANNER_CODE='A5'
  and wipschedul4_.SCHEDULE_GROUP_NAME='Area 2'

и я получаю ошибку "недопустимый номер" при запуске. Но когда я добавляю предложение "where" из класса ...

select count(*) as y0_ 
from WIP_DISCRETE_JOBS this_ 
inner join apps.mfg_lookups       wipdiscret2_ on this_.STATUS_TYPE=wipdiscret2_.LOOKUP_CODE  AND lookup_type = 'WIP_JOB_STATUS'
inner join WIP_ENTITIES           wipentity1_  on this_.WIP_ENTITY_ID=wipentity1_.WIP_ENTITY_ID 
inner join WIP_SCHEDULE_GROUPS    wipschedul4_ on this_.SCHEDULE_GROUP_ID=wipschedul4_.SCHEDULE_GROUP_ID 
inner join INV.MTL_SYSTEM_ITEMS_B item3_       on this_.PRIMARY_ITEM_ID=item3_.INVENTORY_ITEM_ID and this_.ORGANIZATION_ID=item3_.ORGANIZATION_ID 
where wipentity1_.WIP_ENTITY_NAME is not null
  and wipdiscret2_.LOOKUP_CODE=3 
  and item3_.PLANNER_CODE='A5'
  and wipschedul4_.SCHEDULE_GROUP_NAME='Area 2'

и запустить его вручную, он работает нормально. Это просто ошибка в Hibernate или я что-то упустил? Как заставить Hibernate добавить это предложение "where"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...