我如何使用mysql null安全等式运算符< =>在HQL?

时间:2013-10-08 10:40:49

标签: mysql hibernate hql

我想获得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 <=>

1 个答案:

答案 0 :(得分: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文件中定义的持久性单元的名称。