2012-08-31 188 views
2

返回特殊字符,我做了这样的查询:的Java - 休眠不是选择查询

Query query = PlatoonApp.getEntityManager().createQuery(
       "SELECT c FROM Client c WHERE c.type1 LIKE ? or c.type2 LIKE ? or c.type3 LIKE ?" + 
       " or c.type4 LIKE ? ORDER BY c.type", Client.class); 

     query.setParameter(1, legalStrQuery + "%"); 
     query.setParameter(2, legalStrQuery + "%"); 
     query.setParameter(3, individualStrQuery + "%"); 
     query.setParameter(4, individualStrQuery + "%"); 

     query.setFirstResult(startPosition); 

     if (maxResults != 0) 
      query.setMaxResults(maxResults); 

     return (List<Client>) query.getResultList(); 

这是查询。我有一些信息使用“'”,“〜”,这些字符正在被替换。为什么会发生?

+0

什么取代? – kosa

+0

@Nambari与另一个字符。当我在mysql命令行中执行SELECT时,这些字符就像他们应该出来的那样。 –

+0

什么是在hibernate-cfg.xml中定义的字符编码? – kosa

回答

0

通过在其之前添加另一个单引号来逃避单引号。 '将变成''

我不认为~是非法字符,它只是单引号挂起你。

注:我想你可以用下面的正则表达式替换所有单引号,(?!<')['](?!')所以你可以做这样的事情..

stringInstance.replaceAll("(?!<')['](?!')", "''");