JPQL Like语句不返回结果

时间:2014-03-14 20:34:23

标签: sql hibernate jpa jpql targetinvocationexception

我的应用程序中有一个FILE表(使用postgreSQL),它存储了我在操作系统上的文件的完整路径。

当我尝试执行'喜欢'查询时,当我知道有数据保存时,我会一直收到零结果。

以下是有问题的查询:

public List<MyFile> getDirectoryFiles(Path path) {
        Query query = em.createQuery("from MyFile f WHERE f.path LIKE :path");
        query.setParameter("path", "////data////myData////.settings% ESCAPE '//'");  // hard coded the path for testing
        return query.getResultList();
}


@Override
public void deleteDirectoryFiles(Path path) {
    for(MyFile file : this.getDirectoryFiles(path)){
        this.delete(file);
    }
}


// in some other method I am deleting the files from a directory
Foo.deleteDirectoryFiles(this);  // points to '/data/myData/.settings'

不确定为什么会这样。当我接受hibernate生成的内容并插入绝对路径时,我确实在数据库中看到了返回的元组。

有没有人处理过这个问题?如果是这样,你是如何解决这个问题的?我已经尝试将我的':path'变量硬编码为“'/ data / myData / .settings%'”,“%/ data / myData / .settings%”,“// data / myData//.settings% “但仍然没有任何回报。没有错误,但我无法弄清楚为什么没有结果。

1 个答案:

答案 0 :(得分:1)

您的查询语法错误,它看起来更像是HQL查询而不是JPQL。正确的查询应该是这样的:

em.createQuery("SELECT f FROM MyFile f WHERE f.path LIKE :path");