【问题标题】:How can I use mysql null safe equality operator <=> in HQL?如何在 HQL 中使用 mysql 空安全相等运算符 <=>?
【发布时间】:2013-10-15 05:54:28
【问题描述】:

我想获取联系电话不为空的Patient(POJO 类)的记录。所以,我提到了这个post
在答案中指定了两种方式

SELECT * 
FROM table 
WHERE YourColumn IS NOT NULL;   

SELECT *
FROM table 
WHERE NOT (YourColumn <=> NULL); 

从上面我写到下面的 hql 运行成功

from Patient p where p.contactNo is not null    

但是,对于第二种类型的 hql

from Patient p where not (p.contactNo <=> null)

抛出异常

org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: >  

如何在 HQL 中使用 mysql null safe equality operator &lt;=&gt;

【问题讨论】:

  • 为什么要使用 from Patient p where not (p.contactNo null) 当您可以使用 from Patient p where p 轻松实现所需结果时.contactNo 不为空
  • @AnkitSharma:我只是在检查两种方式。我想知道为什么会导致异常?或者我们不能在 HQL 中使用。

标签: mysql hibernate hql


【解决方案1】:

HQL 是一种不同于 MySQL 的语言。 MySQL 运算符不一定在 HQL 中可用。

话虽如此,你可以给 Hibernate MySQL 查询(前提是你的数据库是 MySQL):

Query query = entityMangager.createNativeQuery("Some MySQL code");
List results = query.getResultList();

EntityManager 是来自Java Persistence API 的接口。 Hibernate 有一个tutorial about using the JPA,但这里是要点:

为了拥有一个实体管理器,你需要在你的类路径中有META-INF/persistence.xml 文件。然后,在 Java EE 容器中,您将获得带有 @PersistenceContext 注释的此接口的实例:

@PersistenceContext(unitName = "persistenceUnit")
private EntityManager em;

在 Java EE 容器之外,您可以通过 Persistence 类获得一个:

EntityManagerFactory factory = Persistence.createEntityManagerFactory("persistenceUnit");
EntityManager em = factory.createEntityManager();

在这两种情况下,"persistenceUnit" 必须是您的 persistence.xml 文件中定义的持久性单元的名称。

【讨论】:

  • 您在写我可以使用本机 sql 执行查询。但以不同的方式session.createSQLQuery(hql);。你能告诉我你使用过的entityManager 对象吗?一些文档或如何创建对象entityManager
  • @Aniket 我用有关 JPA 和实体管理器的信息更新了我的答案。
猜你喜欢
  • 2012-04-19
  • 2010-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-28
  • 2016-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多