【问题标题】:hibernate named query xml mappinghibernate命名查询xml映射
【发布时间】:2013-02-18 18:14:02
【问题描述】:

如果我将<query..> 放入我的 Car.hbm.xml 中,我从(Session) HibernateUtil.getSessionFactory().getCurrentSession(); 返回的会话为空,如果我从我的 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();

【问题讨论】:

    标签: hibernate hibernate-mapping hibernate-session


    【解决方案1】:

    查询不是有效的 HQL 查询。它似乎包含特定于所选数据库的 SQL 方言的函数(date_part、age)。一种选择是改用named SQL query。其他选择是扩展方言以包含这些功能。

    【讨论】:

    • Mh... 我已经添加了这个方言:org.hibernate.spatial.dialect.postgis.PostgisDialect 但是 mh.. 在我的 sql 查询中我必须指定我想要返回的对象。我有汽车,我想总结所有汽车的每日销售额。这与一辆车无关..但我没有另一个实体...我不能还车..mhh..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-02
    • 2016-04-18
    • 2021-06-13
    • 2011-06-22
    • 2014-10-13
    • 1970-01-01
    相关资源
    最近更新 更多