私は次の休止状態のマッピングを持っています:
<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クエリは次のようになります:
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);
しかし、私はいつもError: NHibernate.Hql.Ast.ANTLR.QuerySyntaxException
誰かがこれを機能させる方法を教えてもらえますか?
結合の代わりにサブクエリを使用する必要があります。大まかに次のように:
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
のタイプによっては、他の形式で表示する必要がある可能性があります。
Rr.FromTime = '12:15 'のこの欠落している一重引用符は、エラーであるはずです。
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";
これを確認してください。