开发者

Hibernate CreateSQL Query Problem

I'm trying to use hibernates built in createsql function but it seems that it doesn't like the following query.

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();

I have a feeling it's from the nested select statement, but I'm not sure. The inner select is used elsewhere in the code and it returns results fine.

This is my mapping for the first table:

<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>

And the .java

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

  public Table()
  {
  }

  pu开发者_开发技巧blic 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;
  }

}

Any suggestions?

Edit (Added mapping)


you should select the id as well in the outer select. (and not use string concatenation in your query)

Use something like that, hibernate will insert the right column names:

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜