2013-02-18 163 views
0

如果我把<query..>放在我的Car.hbm.xml中,我从(Session) HibernateUtil.getSessionFactory().getCurrentSession();返回的会话为空,如果我从我的xml映射文件中删除查询,那么会话不再为空。 为什么我得到这个错误?我真的被这种问题困住了。休眠命名查询xml映射

我得到这个XML映射:

<hibernate-mapping package="at.opendata.entitys">  
    <class name="Car" table="Cars">  
     <id name="id" column="car_Id"> 
      <generator class="increment"/> 
     </id> 
     <set name="carDetails" table="Cardetail" cascade="all" lazy="false" fetch="select" > 
      <key column="car_id" not-null="true"/> 
      <one-to-many class="CarDetail" /> 
     </set> 
     <property name="name" not-null="true"/> 
     <property name="vin" not-null="true"/>    
    </class>  

    <query name="dailysales"> 
     <![CDATA[select sum(date_part('minute', age(cd.gone, cd.back))) from Car as c left join c.carDetails as cd where cd.gone is not null and cd.back is not null]]> 
    </query> 
</hibernate-mapping> 

而这正是我要调用的命名查询:

Transaction transaction = null; 
int amount = 0; 

try{ 
    Session session = (Session) HibernateUtil.getSessionFactory().getCurrentSession(); 
    transaction = session.beginTransaction(); 

    amount = (Integer)session.getNamedQuery("dailysales").uniqueResult(); 

回答

0

查询是无效的HQL查询。它似乎包含特定于所选数据库的SQL方言的函数(date_part,age)。一种选择是使用named SQL query代替。其他选择是扩大方言来包含这些功能。

+0

MH ......我已经加入这个方言:<属性名=“方言”> org.hibernate.spatial.dialect.postgis.PostgisDialect 但MH ..在我的sql查询我必须指定哪个对象我然后想要返回。 我有车,我想总结一下所有车的日销售额。 这与一辆车无关..但我没有另一个实体...我不能返回一辆车,然后.. mhh .. – krackmoe 2013-02-18 19:10:28