5656import javax .persistence .Table ;
5757import javax .persistence .TableGenerator ;
5858
59+ import org .apache .commons .lang3 .StringUtils ;
5960import org .apache .log4j .Logger ;
6061
6162import com .cloud .utils .DateUtil ;
@@ -878,7 +879,7 @@ protected String buildSelectByIdSql(final StringBuilder sql) {
878879 for (final Field field : clazz .getDeclaredFields ()) {
879880 sql .append (_table ).append ("." ).append (DbUtil .getColumnName (field , overrides )).append (" = ? AND " );
880881 }
881- sql . delete (sql . length () - 4 , sql . length () );
882+ removeAndClause (sql );
882883 }
883884
884885 return sql .toString ();
@@ -1262,10 +1263,11 @@ protected StringBuilder createPartialSelectSql(SearchCriteria<?> sc, final boole
12621263
12631264 @ DB ()
12641265 protected void addJoins (StringBuilder str , Collection <JoinBuilder <SearchCriteria <?>>> joins ) {
1266+ boolean hasWhereClause = true ;
12651267 int fromIndex = str .lastIndexOf ("WHERE" );
12661268 if (fromIndex == -1 ) {
12671269 fromIndex = str .length ();
1268- str . append ( " WHERE " ) ;
1270+ hasWhereClause = false ;
12691271 } else {
12701272 str .append (" AND " );
12711273 }
@@ -1287,13 +1289,19 @@ protected void addJoins(StringBuilder str, Collection<JoinBuilder<SearchCriteria
12871289 .append (" " );
12881290 str .insert (fromIndex , onClause );
12891291 String whereClause = join .getT ().getWhereClause ();
1290- if ((whereClause != null ) && !"" .equals (whereClause )) {
1292+ if (StringUtils .isNotEmpty (whereClause )) {
1293+ if (!hasWhereClause ) {
1294+ str .append (" WHERE " );
1295+ hasWhereClause = true ;
1296+ }
12911297 str .append (" (" ).append (whereClause ).append (") AND" );
12921298 }
12931299 fromIndex += onClause .length ();
12941300 }
12951301
1296- str .delete (str .length () - 4 , str .length ());
1302+ if (hasWhereClause ) {
1303+ removeAndClause (str );
1304+ }
12971305
12981306 for (JoinBuilder <SearchCriteria <?>> join : joins ) {
12991307 if (join .getT ().getJoins () != null ) {
@@ -1302,6 +1310,10 @@ protected void addJoins(StringBuilder str, Collection<JoinBuilder<SearchCriteria
13021310 }
13031311 }
13041312
1313+ private void removeAndClause (StringBuilder sql ) {
1314+ sql .delete (sql .length () - 4 , sql .length ());
1315+ }
1316+
13051317 @ Override
13061318 @ DB ()
13071319 public List <T > search (final SearchCriteria <T > sc , final Filter filter ) {
0 commit comments