0
私はJava Web Application
にpostgresql
データベースとhibernate
を使用しています。私はテーブルcontents
とcontent_data
をテキストフィールドとして持っています。その対応POJO
はContentTO
という名前とデータベースフィールドcontent_data
ためcontentData
と、次のフィールドがありますされています パブリッククラスContentTOpostgresqlのデータベーステーブルフィールドで複数の文字列を検索するHQLクエリ
{
private int contentId;
private String contentData;
private int applicationId;
private int siteId;
private int userCreated;
private int userModified;
private Date createdTime;
private Date updatedTime;
}
私は次のメソッドを持っている:
public List<ContentTO> listContentsBySearchStrings(String searchData, int applicationId, int siteId) throws HibernateException
{
Query query = getCurrentSession().createQuery("ContentTO where siteId = :siteId and lower(contentData) LIKE :searchString ");
query.setParameter("siteId", siteId);
query.setParameter("applicationId", applicationId);
query.setParameter("searchString", "%"+searchData+"%");
List<ContentTO> resultsList = query.list();
if(resultsList != null && ! resultsList.isEmpty())
{
return resultsList;
}
return new ArrayList<ContentTO>();
}
場合にのみ、このメソッドは動作します単一の文字列がフィールド内で検索されます。渡されたパラメータでコンマ区切りの複数の文字列を検索しようとしています。
また、私は、クエリをテストするには、以下のSQLを試してみました:
SELECT * FROM contents
WHERE content_data LIKE '%mydata'
AND content_data LIKE '%testdata'
AND content_data LIKE '%totest';
は、パラメータはカンマで区切られた文字列である場合は、この使用してHQLを行うにはどのような方法があります。
**を "しかし、このクエリはcontent_dataがmydata1234が含まれている場合でも行を戻しますする方法はありますこれを行うにはhqlを使用してください。 "** あなたの' content_data LIKE '%mydata%' '条件がmysqlのために1234と一致するので、それはそのデータを返します。 –
@sumitbadaya、ありがとう、私は質問を更新しました –
まだ不明です。具体的な例として、2行または3行と、変数に含まれるものと、クエリが返すものとを示します。しかし、一般的に、カンマで区切られた文字列を列に格納する場合は、それを行わずにOneToManyまたはElementCollectionを持つ別のテーブルを使用します。あなたの変数にコンマ区切りの文字列がある場合は、それを行わずに、リストまたはセットを代わりに渡します。 –