NHibernate中遇到的1898号问题,命名查询具体有哪些问题?

2026-05-25 10:273阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计480个文字,预计阅读时间需要2分钟。

NHibernate中遇到的1898号问题,命名查询具体有哪些问题?

本节内容+概述+实例+参考资料+概述+本系列以博客形式整理关于Hibernate问题的内容。记录一些零散的小例子,通过点点滴滴的整理,可以巩固自己的知识,并扩展我们的知识面。以下是一些小例子。

本节内容

  • 概览
  • 实例
  • 参考资料
概览

这个系列是以博客形式整理关于NHibernate的Issues。记录一些零碎的小例子,通过零零碎碎的整理,可以巩固自己的知识和扩展我们的知识面。这些小例子也可以适当的在项目中呈现。

这次看看ISession.GetNamedQuery()方法。

NHibernate中遇到的1898号问题,命名查询具体有哪些问题?

实例

这个小例子在我们替换更新类中属性值的时候非常有用,直接使用ExecuteUpdate()针对其某个对象更新,效率上也好很多。

1.Domain

public class DomainClass { public virtual int Id { get; set; } public virtual string Data { get; set; } } 2.Mapping

<class name="DomainClass"> <id name="Id"> <generator class="assigned" /> </id> <property name="Data" /> </class> <query name="replaceQuery"> <query-param name="old" type="String"/> <query-param name="new" type="String"/> <![CDATA[ update DomainClass set Data = replace(Data,:old, :new) ]]> </query> 3.Test

//1.保存一个Domain using (var session = OpenSession()) { using (var tx = session.BeginTransaction()) { var entity = new DomainClass { Id = 1, Data = "some oldValue data" }; session.Save(entity); tx.Commit(); } } using (var session = OpenSession()) { //使用命名查询更新Domain的Data属性 using (var tx = session.BeginTransaction()) { session.GetNamedQuery("replaceQuery") .SetString("old", "oldValue") .SetString("new", "newValue").ExecuteUpdate(); tx.Commit(); } //验证Domain的Data属性 using (var tx = session.BeginTransaction()) { var entity = session.Get<DomainClass>(1); Assert.AreEqual("some newValue data", entity.Data); tx.Commit(); } } 4.结果

INSERT INTO DomainClass (Data, Id) VALUES ('some oldValue data', '1'); update DomainClass set Data=replace(Data,'oldValue','newValue'); SELECT domainclas0_.Id as Id0_0_, domainclas0_.Data as Data0_0_ FROM DomainClass domainclas0_ WHERE domainclas0_.Id='1'; 参考资料

Dario Quintana:Why use named queries with NHibernate

本文共计480个文字,预计阅读时间需要2分钟。

NHibernate中遇到的1898号问题,命名查询具体有哪些问题?

本节内容+概述+实例+参考资料+概述+本系列以博客形式整理关于Hibernate问题的内容。记录一些零散的小例子,通过点点滴滴的整理,可以巩固自己的知识,并扩展我们的知识面。以下是一些小例子。

本节内容

  • 概览
  • 实例
  • 参考资料
概览

这个系列是以博客形式整理关于NHibernate的Issues。记录一些零碎的小例子,通过零零碎碎的整理,可以巩固自己的知识和扩展我们的知识面。这些小例子也可以适当的在项目中呈现。

这次看看ISession.GetNamedQuery()方法。

NHibernate中遇到的1898号问题,命名查询具体有哪些问题?

实例

这个小例子在我们替换更新类中属性值的时候非常有用,直接使用ExecuteUpdate()针对其某个对象更新,效率上也好很多。

1.Domain

public class DomainClass { public virtual int Id { get; set; } public virtual string Data { get; set; } } 2.Mapping

<class name="DomainClass"> <id name="Id"> <generator class="assigned" /> </id> <property name="Data" /> </class> <query name="replaceQuery"> <query-param name="old" type="String"/> <query-param name="new" type="String"/> <![CDATA[ update DomainClass set Data = replace(Data,:old, :new) ]]> </query> 3.Test

//1.保存一个Domain using (var session = OpenSession()) { using (var tx = session.BeginTransaction()) { var entity = new DomainClass { Id = 1, Data = "some oldValue data" }; session.Save(entity); tx.Commit(); } } using (var session = OpenSession()) { //使用命名查询更新Domain的Data属性 using (var tx = session.BeginTransaction()) { session.GetNamedQuery("replaceQuery") .SetString("old", "oldValue") .SetString("new", "newValue").ExecuteUpdate(); tx.Commit(); } //验证Domain的Data属性 using (var tx = session.BeginTransaction()) { var entity = session.Get<DomainClass>(1); Assert.AreEqual("some newValue data", entity.Data); tx.Commit(); } } 4.结果

INSERT INTO DomainClass (Data, Id) VALUES ('some oldValue data', '1'); update DomainClass set Data=replace(Data,'oldValue','newValue'); SELECT domainclas0_.Id as Id0_0_, domainclas0_.Data as Data0_0_ FROM DomainClass domainclas0_ WHERE domainclas0_.Id='1'; 参考资料

Dario Quintana:Why use named queries with NHibernate