使用NHibernate'的HQL来做一个有多个内部连接的查询
这里的问题包括将LINQ写入SQL语法的语句转换为NHIBERNATE的等效物. LINQ到SQL代码看起来像: var whatevervar = from threads in context.THREADs join threadposts in context.THREADPOSTs on threads.thread_id equals threadposts.thread_id join posts1 in context.POSTs on threadposts.post_id equals posts1.post_id join users in context.USERs
10 2024-04-26
编程技术问答社区
NHiberate查询中的基本日期/时间操作
我试图用一些基本日期/时间操作限制我的 nhibernate 查询.更具体地说,我想执行以下语句(pseudo-sql): select * from article where created_on + lifespan >= sysdate with: created_on映射到类型DateTime的属性. lifespan映射到类型TimeSpan的属性. sysdate是当前日期/时间(数据库服务器或应用程序主机的,我不在乎) 是否有使用 criteria-api 或 hql ? 来实现这一目标 return session .CreateCriteria() .Add( ? ) .List(); 解决方案 由于查询是由服务器执行的,因此需要支持您要执行的操作. 如果这样做,您需要继承相应的方言并在其构造函数中注册相应的功能. 其他解决方案 create view activeart
14 2024-04-25
编程技术问答社区
使用HqlBasedQuery对HQL IN子句进行参数化?
您如何通过nhibernate hql中的" in"子句的事物列表? ,例如 // data input from the user interface, not known at compile time object[] productIds = {1, 17, 36, ... }; string hqlQuery = @" from Product as prod where prod.Id in ( ? )"; HqlBasedQuery query = new HqlBasedQuery(typeof(Product), hqlQuery, productIds) ActiveRecordMediator.ExecuteQuery(query); 现在,这不会像我希望的那样工作!我真的很坚持这样的事情: // data input from the user interface, not k
8 2024-04-19
编程技术问答社区
在使用HQL进行批量更新/删除后,我是否必须刷新实体?
我编写了一些DAO方法,可以使用HQL进行大量更新/删除,但是我看到,当查询执行时,内存中的实体未被统一(未更新缓存). . 说,我有一系列项目的集合,每个项目都有一个集团,我想删除所有组.我可以迭代组并删除每个组,但我更喜欢在HQL和运营商中运行批量删除.但是,该列表执行查询后具有旧对象. 我意识到我必须用session.refresh()刷新对象.还有其他方法可以自动进行更新和更新缓存吗? 解决方案 答案是否.如下所示: 13.3. DML风格的操作 引用: ...如已经讨论过的那样,自动和透明的对象/关系映射与对象状态的管理有关. 这意味着对象状态可在内存,中可用EM> 数据库中的数据不会影响内存状态.但是,NHIBERNATE提供了通过Hibernate查询语言(HQL)执行的批量SQL风格DML语句执行的方法... dml在那里,可以跳过内存中的状态管理...从SQL语句的角度来看,更有效.但这意味着: 操纵...数据库中的数
12 2024-04-17
编程技术问答社区
NHibernate HQL内联 (SQL Server,Visual C#)
我想将HQL与内联合使用.但是,引发了查询语法异常. 这是我的C#代码: string sqlQuery = "Select fq FROM Answers as fq INNER JOIN Questions as q " + " on fq.questionId=q.questionId"; IList Result; int count = 0; try { using (ISession session = ConnectionModule.OpenSession()) { IQuery query = session.CreateQuery(sqlQuery); session.CreateCriteria(typeof(Answers)); Result = query.List(); } } catch(Exception ex) { MessageBox.Show(e
6 2024-04-17
编程技术问答社区
Hibernate查询中的Unicode字符串
在SQL中,可以编写一个查询,以搜索这样的人的名称: SELECT * FROM Person P WHERE P.Name LIKE N'%ike%' 此查询将使用Unicode字符运行(假设设置了名称列和数据库来处理Unicode支持). i在HQL中有类似的查询,该查询由Hibernate(Nhibernate)运行.生成的查询看起来像: SELECT P FROM SumTotal.TP.Models.Party.Person P join P.Demographics PD WHERE (PD.LastName LIKE '%カタカ%' ) 不幸的是,将" n"放在HQL中的字体前面会导致错误.我尝试逃脱字符串中的Unicode字符,但仍然没有成功. 数据库正在接受并从Hibernate中保存Unicode字符.我已经能够成功地用Unicode字符串填充对象,并用Hibernate保存并在数据库中验证它.在我看来,我不能在自定义查询中使用Uni
10 2024-04-16
编程技术问答社区
NHibernate 如何针对IList<string>属性进行查询?
我正在尝试使用NHIBERNATE在我的一个域类上查询Ilist 属性.这是一个简单的示例: public class Demo { public Demo() { this.Tags = new List(); } public virtual int Id { get; set; } public virtual string Name { get; set; } public virtual IList Tags { get; set; } } 这样映射: 我可以保存
8 2024-04-11
编程技术问答社区
MYSQL区分大小写的搜索(使用hibernate),用于utf8。
我有登录表,当我想要检查用户名并检索此特定用户名的其他信息时,HQL查询为我带来了相同的结果,该登录表具有UTF8 Charset和UTF8整理. 我应该为我的HQL查询做什么工作案例 我使用MySQL 5和Java Hibernarte 这是我的查询: return queryManager.executeQueryUniqueResult("select b.login from BranchEntity b where b.userName = ?", username); 解决方案 最简单的方法是将列的定义更改为utf8_bin(例如utf8_bin). 详细信息是在这里 其他解决方案 添加类 public class CollateDialect extends MySQLDialect { @Override public String getTableTypeString() { return " COL
8 2024-03-20
编程技术问答社区
使用Orchard HQL API将非ContentPart表加入到ContentPart表中
我试图使用果园HQL API在两个不同表之间执行简单的联接.问题在于,其中一个表不可用.这有可能?? 这就是常规SQL中的样子: Select * From ItemPartRecord Join ItemRecord On ItemRecord.ItemId = ItemPartRecord.ItemId Where ItemRecord.Price Between 1000 and 10000 我该怎么做? 解决方案 如果有人想知道该怎么做: //Join the non content part table var defaultHqlQuery = query as DefaultHqlQuery; var fiJoins = typeof(DefaultHqlQuery).GetField("_joins", BindingFlags.Instance | BindingFlags.NonPublic); var joins = fiJoins
8 2024-03-14
编程技术问答社区
将CreateSQLQuery存储过程的结果转为非映射类
在我的应用程序中,我想从存储过程中获取数据未在应用程序中映射的过程中.在此存储过程中,我添加了列表的列名称,这些列名称响应我的班级中的属性. hql: return Session.CreateSQLQuery("exec PER_PrikklokSaldi :IDPers :jaar :maand") .AddScalar("Description", NHibernateUtil.String) .AddScalar("StartSaldo", NHibernateUtil.Int32) .AddScalar("Plus", NHibernateUtil.Int32) .AddScalar("Minus", NHibernateUtil.Int32) .AddScalar("EndSaldo", NHibernateUtil.Int32)
14 2024-03-14
编程技术问答社区
有没有什么简单的方法可以将Criteria转换为HQL?
我发布了一个问题几天前带有标准API的集合,毕竟我看到我正在尝试的事情是不可能的,在NHIBERNATE和HIBERNATE中存在一个错误 我正在使用分离式标准将所有标准放在一起,列表确实很长.链条的最后一个圈子是越野车标准,所以我需要将所有的分离符号更改为HQL. 所以我的问题是有任何将标准转换为HQL的工具或方法. 或 有什么方法可以获得标准和HQL一起工作? 解决方案 我已经向 Ayende Rahien 发送了一封电子邮件,并感谢他回复.他说 答案是没有这样的工具,但是转换通常很容易. 其他解决方案 从Hibernate论坛进行重新播放...不确定是否与Nhibernate有关还是最新的 来自: Max Hibernate Team 发表:2006年12月24日Sun 7:12 AM 这是一个非常顽固的民间传说,标准转化为HQL.标准直接进入SQL,但没有直接的公共API来编程. ... 翻译两次不是很高
6 2024-03-09
编程技术问答社区
基于Hibernate注解的查询执行错误?
实际上在我的基于冬眠注释的应用程序中具有whereObject类(BEAN类),这些是.. public Class CourseVO{ @Column(name="NAME") private String name; } SkillSetvo类 public Class SkillsetVO{ @ManyToOne @JoinColumn(name="COURSE_ID", insertable=false, updatable=false) private CourseVO courseSID; @ManyToMany(cascade = {CascadeType.ALL}, fetch=FetchType.EAGER) @JoinTable(name="SKILLSET_COURSE",joinColumns={@JoinColumn(name="SKILLSET_ID",referencedColumnName="S_ID"
14 2024-02-26
编程技术问答社区
HQL组合聚合函数
我的问题是我不能将这两个汇总函数一起使用,例如查询中:avg(min(首先,我需要从该实体术语resultCurrent获得最小值,之后所有最低值的平均值.必须通过小组更改并包括其他一些条款以获取最低值(我不知道是否可能).否则,它可能是使用子征服,但我对组有问题...我知道非常具有挑战性,但我确实感谢您的帮助. SELECT AVG(MIN(termResultCurrent.position)), count(*) FROM TermSubscription subscription, Competitor competitor, TermQuery termQueryPrev, IN(termQueryPrev.results) termResultPrev, TermQuery termQueryCurrent,IN(termQueryCurrent.results) termResultCurrent WHE
16 2024-01-19
编程技术问答社区
HQL 未预期的AST节点: min
我正在尝试创建一个hql查询: List results = session.createQuery("FROM Task where ProcessID = :procId " + "and Role = :role and completed = 0 " + "group by TaskID " + "having min(chronology)") .setParameter("procId", procId) .setParameter("role", role).list(); 发生以下错误: :1:114: unexpected AST node: min at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logica
54 2024-01-09
编程技术问答社区
NHibernate HQL等同于T-SQL的TOP关键字
什么是NHibernate HQL等于T-SQL的顶级关键字? 另外,说出班级的前15个的非HQL方法是什么? 解决方案 实际上在HQL中很容易: var top15 = session.CreateQuery("from SomeEntity") .SetFirstResult(0) .SetMaxResults(15) .List(); 不知道如何使用标准API执行此操作. 其他解决方案 标准API方法: ICriteria criteria = DaoSession.CreateCriteria(typeof(T)); criteria.SetFirstResult(StartIndex); criteria.SetMaxResults(MaximumObjects); return criteria.List();
16 2024-01-04
编程技术问答社区
如何在Hibernate中做基于自定义查询的集合映射?
我的对象被映射到具有一组对象,非常简单.但是,我真正想做的是在该映射上添加一些标准.这是当前的映射: 现在,我不仅要获得所有关联的操作,还只想获得尚未完成或拥有的OPS.冬眠文档对此非常安静,尽管一些旧的论坛帖子向我展示了一点.您显然可以使用SQL-Query标签,但这也不是我想做的. 无论如何是否可以使用HQL查询来执行此操作?我只想用简单的查询范围缩小结果,并有一些收集地图,例如Active_Ops和pountty_ops等. 欢呼, 杰森 解决方案 在 6.2 6.2
16 2023-12-22
编程技术问答社区
hql中的row_number()over partition
与hql中的分区相当于row_number()的等效物 我在HQL中有以下查询: select s.Companyname, p.Productname, sum(od.Unitprice * od.Quantity - od.Discount) as SalesAmount FROM OrderDetails as od inner join od.Orders as o inner join od.Products as p " + "inner join p.Suppliers as s" + " where o.Orderdate between '2010/01/01' and '2014/01/01' GROUP BY s.Companyna
16 2023-12-05
编程技术问答社区
如何在 "like "子句中转义通配符?
我如何在类似子句中逃脱通配符? 例如: select foo from Foo as foo where foo.bar like '%' || :filter ||'%' query.setParameter("filter", "%"); query.list(); // I'd expect to get the foo's containing the '%' in bar, not all of them! 有什么想法? 解决方案 在Hibernate 3中,您可以使用逃生参数指定逃生字符: select foo from Foo as foo where foo.bar like '!%' escape '!' 我认为这应该有效,尽管我从未在实践中尝试过.
14 2023-12-04
编程技术问答社区
JPQL-具有多个where条件的更新
JPQL是否支持以下更新? Update Person p set p.name = :name_1 where p.id = :id_1, p.name = :name_2 where p.id = :id_2, p.name = :name_3 where p.id = :id_3 如果没有,还有其他选择吗? 我自己尝试了.但是createQuery返回null. 解决方案 案例表达在JPA 2.0中支持.我提供了伪代码,可以进行相应的修改. 您可以使用CASE. Update Person p set p.name = CASE WHEN (p.id = :id1) THEN :name_1 WHEN (p.id = :id2) THEN :name_2 WHEN (p.id = :id3) THEN :name_3 END general_case_expression
16 2023-12-03
编程技术问答社区
JPA-Batch/Bulk Upd-What is the better approach?
我发现JPA不支持以下更新: Update Person p set p.name = :name_1 where p.id = :id_1, p.name = :name_2 where p.id = :id_2, p.name = :name_3 where p.id = :id_3 .... // It could go on, depending on the size of the input. Could be in 100s 所以我有两个选择: 选项1: Query q = em.createQuery("Update Person p set p.name = :name where p.id = :id"); For ( int x=0; PersonsList.length; x++ ) {
26 2023-12-03
编程技术问答社区