Re[4]: hql- запрос к дочерней сущности в двунаправленной асс
От: ivanov-void  
Дата: 14.03.12 08:20
Оценка:
Здравствуйте, Antei, Вы писали:

A>Возьми текст запроса получающегося в результате и попробуй его выполнить в какой-нибудь тулзе SQL Developer/PLSQL Developer/TOAD. Сразу и увидишь проблему. Может где-то используется ключевое слово в названии какой-нибудь колонки...


A>

To avoid ORA-00904, column names cannot be a reserved word, and must contain these four criteria to be valid:

A> * begin with a letter
A> * be less than or equal to thirty characters
A> * consist only of alphanumeric and the special characters ($_#); other characters need double quotation marks around them


Да, все верно.

В дочерней сущности замапил связь через JoinTable —


...
    @ManyToOne(cascade = {CascadeType.REFRESH}, fetch = FetchType.LAZY)
    @JoinTable(name="MARKSIST.GB_CAPACITY",joinColumns={@JoinColumn(name="ORG_ID")})
    private GbCapacityEntity gbCapacityEntity;

...


Запрос —


...
        String hql = "FROM com.intellex.marksist.hbn.model.GbLoadForecast G " +
                      "WHERE G.orgId = :id1 AND G.cargoGroup = :id2";

...


Принял вид —


...
     [java] Hibernate: 
     [java]     select
     [java]         gbloadfore0_.ORG_ID as ORG1_4_,
     [java]         gbloadfore0_.GRUP_GRUZ as GRUP2_4_,
     [java]         gbloadfore0_.CHANGER_ID as CHANGER3_4_,
     [java]         gbloadfore0_.FST_2012 as FST4_4_,
     [java]         gbloadfore0_.FST_2013 as FST5_4_,
     [java]         gbloadfore0_.FST_2014 as FST6_4_,
     [java]         gbloadfore0_.FST_2015 as FST7_4_,
     [java]         gbloadfore0_.RW_ID as RW8_4_,
     [java]         gbloadfore0_.SENDER_ID as SENDER9_4_,
     [java]         gbloadfore0_.ST_ID as ST10_4_,
     [java]         gbloadfore0_1_.gbCapacityEntity_ORG_ID as gbCapac10_3_ 
     [java]     from
     [java]         MARKSIST.GB_LOAD_FORECAST gbloadfore0_,
     [java]         MARKSIST.GB_CAPACITY gbloadfore0_1_ 
     [java]     where
     [java]         gbloadfore0_.ORG_ID=gbloadfore0_1_.ORG_ID(+) 
     [java]         and gbloadfore0_.ORG_ID=? 
     [java]         and gbloadfore0_.GRUP_GRUZ=?
...


Исключение —
[java] 3634 ["http-apr-8080"-exec-7] ERROR org.hibernate.util.JDBCExceptionReporter — ORA-00904: "GBLOADFORE0_1_"."GBCAPACITYENTITY_ORG_ID": ???????????? ?????????????

Прогнал запрос в PL/ SQL Dev —


select
  gbloadfore0_.ORG_ID as ORG1_4_,
  gbloadfore0_.GRUP_GRUZ as GRUP2_4_,
  gbloadfore0_.CHANGER_ID as CHANGER3_4_,
  gbloadfore0_.FST_2012 as FST4_4_,
  gbloadfore0_.FST_2013 as FST5_4_,
  gbloadfore0_.FST_2014 as FST6_4_,
  gbloadfore0_.FST_2015 as FST7_4_,
  gbloadfore0_.RW_ID as RW8_4_,
  gbloadfore0_.SENDER_ID as SENDER9_4_,
  gbloadfore0_.ST_ID as ST10_4_,
  gbloadfore0_1_.gbCapacityEntity_ORG_ID as gbCapac10_3_ 

from
  MARKSIST.GB_LOAD_FORECAST gbloadfore0_,
  MARKSIST.GB_CAPACITY gbloadfore0_1_ 

where
  gbloadfore0_.ORG_ID=gbloadfore0_1_.ORG_ID(+) and 
  gbloadfore0_.ORG_ID=310961 and 
  gbloadfore0_.GRUP_GRUZ=13


В селекте вместо ORG_ID какое- то странное вхождение — gbCapacityEntity_ORG_ID, В предикате where обращение корректное — gbloadfore0_.ORG_ID=gbloadfore0_1_.ORG_ID(+)

Поэтому, собственно, такое исключение. Однако вопрос- почему в запросе, сгенерированном Hibernate, фигурирует неизвестное и не существующее поле?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.