在Hibernate HQL更新查询中使用联接 [英] Using a join in a Hibernate HQL update query

查看:98
本文介绍了在Hibernate HQL更新查询中使用联接的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下hibernate映射:

i have the following hibernate mapping:

 <class name="Domain.Roomreservation, Core" table="Reservationroom">
    <id name="ID" unsaved-value="undefined">
        <generator class="native">
            <!--<param name="sequence">GLOBALSEQUENCE</param>-->
        </generator>
    </id>

    <property name="FromTime" not-null="true" index="IDX_RESRAUM_FromTime" />
    <property name="UntilTime" not-null="true" index="IDX_RESRAUM_UntilTime"/>

    <many-to-one name="Booking" column="Book_ID" index="IDX_RAUMRES_BOOK" lazy="false"
        class="Domain.Booking, Core" not-null="true" />
    </class>

Reservationroom 表格如下所示:

ID         <pk>
Book_ID    <fk>
FromTime
UntilTime
....
....

我的Hibernate Query看起来像:

My Hibernate Query looks like:

String hql = "UPDATE Roomreservation as rr set rr.FromTime= 12:15" +
                     "Inner Join Booking b ON rr.Book_ID= b.ID " +
                     "Where b.ID = 95637";
                        IQuery query = CurrentSession.CreateQuery(hql);
                        int result = query.ExecuteUpdate();
                        Debug.WriteLine("Rows affected: " + result);

但我总是收到错误:NHibernate.Hql.Ast.ANTLR.QuerySyntaxException

有人可以帮我解决这个问题吗?

Can someone help me how to get this to work?

推荐答案

你必须使用子查询而不是加入。大致如下:

You have to use subquery instead of join. Roughly as follows:

UPDATE Roomreservation as rr set rr.FromTime= 12:15
WHERE rr.Book_ID IN (
  SELECT b.id 
  FROM Booking b 
  WHERE b.id = 95637);

另外取决于 FromTime 的类型,它是很可能它应该以其他格式呈现。

Additionally depending about type of FromTime it is likely that it should be presented in some other format.

这篇关于在Hibernate HQL更新查询中使用联接的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆