2010-05-06 3 views
0

Я пытаюсь использовать спящий режим, встроенный в функцию createql, но кажется, что ему не нравится следующий запрос.Hibernate CreateSQL Query Problem

List =hibernateSession.createSQLQuery("SELECT number, location FROM table 
WHERE other_number IN 
(SELECT f.number FROM table2 AS f JOIN table3 AS g on f.number = g.number 
WHERE g.other_number = " + var + ") 
ORDER BY number").addEntity(Table.class).list(); 

У меня такое чувство, что это из вложенного оператора select, но я не уверен. Внутренний выбор используется в другом месте в коде, и он возвращает результаты штрафа.

Это мое отображение для первой таблицы:

<hibernate-mapping> 

    <class name="org.efs.openreports.objects.Table" table="table"> 

     <id name="id" column="other_number" type="java.lang.Integer"> 
      <generator class="native"/> 
     </id> 

     <property name="number" column="number" not-null="true" unique="true"/> 
     <property name="location" column="location" not-null="true" unique="true"/> 

    </class> 

</hibernate-mapping> 

И .java

public class Table implements Serializable 
{ 
    private Integer id;//panel_facility 
    private Integer number; 
    private String location; 

    public Table() 
    { 
    } 

    public void setId(Integer id) 
    { 
    this.id = id; 
    } 

    public Integer getId() 
    { 
    return id; 
    } 

    public void setNumber(Integer number) 
    { 
    this.number = number; 
    } 

    public Integer number() 
    { 
    return number; 
    } 

    public String location() 
    { 
    return location; 
    } 

    public void setLocation(String location) 
    { 
     this.location = location; 
    } 

} 

Есть предложения?

Edit (Добавлено отображение)

+0

Что такое исключение? –

+0

Я получаю недопустимое имя столбца для other_number в первой таблице. Имя столбца написано правильно, и оно находится в базе данных. Я буду размещать свои сопоставления, может быть, там. – Shaded

ответ

1

вы должны выбрать идентификатор, а во внешнем выберите. (а не использовать конкатенацию в запросе)

использовать что-то вроде этого, спящий режим будет вставить правильные имена столбцов:

List l = hibernateSession.createSQLQuery("SELECT {t.*} FROM table t 
WHERE other_number IN 
(SELECT f.number FROM table2 AS f JOIN table3 AS g on f.number = g.number 
WHERE g.other_number = :var) 
ORDER BY number") 
.addEntity("t", Table.class).setParameter("var", actualObject).list(); 
+0

Удивительный! который работал как шарм! Большое спасибо! – Shaded