0

アプリケーション内に(postgreSQLを使用して)FILEテーブルがあり、OSにあるファイルのフルパスを保存しています。

「いいね」クエリを実行しようとすると、データが保存されていることがわかっているのに、結果がゼロのままです。

問題のクエリは次のとおりです。

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'

なぜこれが起こっているのか分かりません。休止状態が生成しているものを取得して絶対パスをプラグインすると、データベース内に返されたタプルが表示されます。

誰もこの問題に対処したことがありますか? もしそうなら、どのように問題を解決しましたか?「:path」変数を「/data/myData/.settings%」、「%/data/myData/.settings%」、「//data//myData//.settings%」にハードコーディングしてみました" それでも何も返されません。エラーはありませんが、結果がない理由がわかりません。

4

1 に答える 1

1

クエリの構文が間違っています。JPQL よりも HQL クエリに似ています。正しいクエリは次のようになります。

em.createQuery("SELECT f FROM MyFile f WHERE f.path LIKE :path");
于 2014-03-14T20:49:47.750 に答える