diff --git a/pom.xml b/pom.xml
index 6080791..9a704b4 100755
--- a/pom.xml
+++ b/pom.xml
@@ -64,6 +64,12 @@
commons-lang
2.3
+
+
+ org.apache.commons
+ commons-lang3
+ 3.7
+
diff --git a/src/main/java/org/codiki/core/repositories/PostSearchRepositoryImpl.java b/src/main/java/org/codiki/core/repositories/PostSearchRepositoryImpl.java
index 2548b2e..0f8784e 100755
--- a/src/main/java/org/codiki/core/repositories/PostSearchRepositoryImpl.java
+++ b/src/main/java/org/codiki/core/repositories/PostSearchRepositoryImpl.java
@@ -22,7 +22,7 @@ public class PostSearchRepositoryImpl implements PostSearchRepository {
final String queryStr = buildSearchQuery(pCriterias);
try {
- final Query query = em.createQuery(queryStr);
+ final Query query = em.createNativeQuery(queryStr, Post.class);
for(int i = 1 ; i <= pCriterias.length ; i++) {
query.setParameter(StringUtils.concat("c", i), StringUtils.concat('%', pCriterias[i - 1].toLowerCase(), '%'));
}
@@ -35,15 +35,15 @@ public class PostSearchRepositoryImpl implements PostSearchRepository {
}
protected String buildSearchQuery(final String[] pCriterias) {
- final StringBuilder result = new StringBuilder("SELECT p FROM Post p JOIN FETCH p.category JOIN FETCH p.author ");
+ final StringBuilder result = new StringBuilder("SELECT * FROM post p INNER JOIN category c ON c.id = category_id INNER JOIN \"user\" u ON u.id = p.creator_id ");
for(int i = 1 ; i <= pCriterias.length ; i++) {
- result.append(StringUtils.concat((i == 1) ? "WHERE" : "OR", " LOWER(p.title) LIKE :c", i,
- " OR LOWER(p.description) LIKE :c", i,
- " OR LOWER(p.text) LIKE :c", i,
- " OR LOWER(p.category.name) LIKE :c", i,
- " OR LOWER(p.author.name) LIKE :c", i,
- " OR LOWER(p.author.email) LIKE :c", i, " "));
+ result.append(StringUtils.concat((i == 1) ? "WHERE" : "OR", " UNACCENT(p.title) ILIKE UNACCENT(:c", i, ")",
+ " OR UNACCENT(p.description) ILIKE UNACCENT(:c", i, ")",
+ " OR UNACCENT(p.text) ILIKE UNACCENT(:c", i, ")",
+ " OR UNACCENT(c.name) ILIKE UNACCENT(:c", i, ")",
+ " OR UNACCENT(u.name) ILIKE UNACCENT(:c", i, ")",
+ " OR UNACCENT(u.email) ILIKE UNACCENT(:c", i, ") "));
}
return result.toString();