2014-01-21 33 views
1

我如何獲得記錄,前4個字符'匹配我的字符串使用HQL?HQL字符串左

這是我的HQL語句:

Query query = HibernateUtil.getSessionFactory().getCurrentSession().createQuery("from User where substring(user, 4) like :user"); 

query.setParameter("user", "John"); 

它返回什麼。但是,如果我在MySQL中重用SQL語句並將「substring」一詞更改爲LEFT,那麼它將返回大量記錄。

我也試着與我的HQL「左」代替「子」,但它給了我這個錯誤,當我做:

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

+1

你嘗試'substring(user,1,4)like:user'? HQL中的 –

+0

您不允許使用mysql函數。所以,最好使用本機sql。即:https://stackoverflow.com/questions/8648787/how-to-implement-mysql-date-sub-function-in-hibernate-3-0 –

回答

3

left等效需要substring()有三個參數。第二個是偏移量,第三個是字符數。因此,要獲得前四個字符:

Query query = HibernateUtil.getSessionFactory().getCurrentSession().createQuery("from User where substring(user, 1, 4) like :user"); 

表達substring(user, 4)通常需要開始的第四個字符的字符串結尾的字符串(我說「通常」,因爲這是功能,但我的典型行爲不知道HQL是否確實如此)。

1

你能不能用像和通配符做到這一點代替?

Query query = HibernateUtil.getSessionFactory().getCurrentSession().createQuery(
"from User u where u.user like :user"); 

query.setString("user", "John%"); 

否則做一個native query