java - Hibernate: Multiple filters on an entity -


i want have multiple hibernate filters on entity, have tried logical without luck , google has come short on one, has hibernate doc. can't imagine not possible. (using java 6 hibernate 4.1.9.final)

currently, have this:

@entity @table(name = "category") public class category implements serializable {     private static final long serialversionuid = 1l;      @id     @column(name = "categoryid")     private int id;      @column(name = "categoryname")     private string name;      @onetomany(fetch = fetchtype.eager)     @joincolumn(name = "categoryid")     @orderby("testcaseid desc")     @filter(name = "test_run_id_filter")     private collection<testcase> testcases; ... }  @entity @table(name = "testcase_new") @filterdef(name = "test_run_id_filter", defaultcondition = "testrunid in (:ids)", parameters = { @paramdef(name = "ids", type = "int") }) public class testcase implements serializable {     private static final long serialversionuid = 1l;      @id     @column(name = "testcaseid")     private int id;      @column(name = "testcasename")     private string name;  ... } 

i want add second independent filter testcase class. after this:

select ...     category inner join testcase on category.categoryid = testcase.categoryid  testcase.testrunid in (....)    , testcase.testcasename '%..%' 

this tried

i tried adding multiple @filterdefs testcase such, didn't compile:

    @entity     @table(name = "testcase_new")     @filterdef(name = "test_run_id_filter", defaultcondition = "testrunid in (:ids)",  parameters = { @paramdef(name = "ids", type = "int") })     @filterdef(name = "testcase_name_filter", defaultcondition = "testcasename :testcase_name",  parameters = { @paramdef(name = "testcase_name", type = "string") })      public class testcase implements serializable     {         private static final long serialversionuid = 1l;          @id         @column(name = "testcaseid")         private int id;          @column(name = "testcasename")         private string name;      ...     } 

the hibernate documentation led to try complained testrunid filter non-existent

    @entity     @table(name = "category")     public class category implements serializable     {         private static final long serialversionuid = 1l;          @id         @column(name = "categoryid")         private int id;          @column(name = "categoryname")         private string name;          @onetomany(fetch = fetchtype.eager)         @joincolumn(name = "categoryid")         @orderby("testcaseid desc")         private collection<testcase> testcases;     ...     }          @entity     @table(name = "testcase_new")     @filterdef(name = "testcase_filter", parameters = { @paramdef(name = "ids", type = "int"), @paramdef(name = "testcase_name", type = "string") })     @filters({ @filter(name = "test_run_id_filter", condition = "testrunid in (:ids)"), @filter(name = "testcase_name_filter", condition = "testcasename :testcase_name") })     // @filterdef(name = "test_run_id_filter", defaultcondition = "testrunid in (:ids)", parameters = { @paramdef(name =     // "ids", type = "int") })     public class testcase implements serializable     {         private static final long serialversionuid = 1l;          @id         @column(name = "testcaseid")         private int id;          @column(name = "testcasename")         private string name;         ...     }      @suppresswarnings("unchecked")         public list<category> getcategories(list<integer> testrunids, string category, string testcasename)         {             session session = getsession();             session.enablefilter("file_type_filter");             if (testrunids != null && testrunids.size() != 0)             {                 session.enablefilter("test_run_id_filter").setparameterlist("ids", testrunids);             }             if (category != null && !category.equals("0") && !category.equals(""))             {                 session.enablefilter("category_filter").setparameter("category", category);             }              /*              * hibernate wants (left) outer join default.              * bit of hql required inner join.              * query tells hibernate inner join on testcases property inside category object              */              query query = session.createquery("select distinct c category c inner join c.testcases tc");             list<category> result = query.list();             return result;  .. } 

your appreciated

i've solved actually, help. solution (detailed below) wrap multiple @filterdef annotations in @filterdefs annotation. oddly enough didn't find anywhere or in hibernate doc, saw post (multiple annotations of same type on 1 element?), , thought hey maybee @filterdefs exists , does.

@entity @table(name = "testcase_new") @filterdefs({         @filterdef(name = "testcase_name_filter", defaultcondition = "testcasename :testcasename", parameters = { @paramdef(name = "testcasename", type = "string") }),         @filterdef(name = "test_run_id_filter", defaultcondition = "testrunid in (:ids)", parameters = { @paramdef(name = "ids", type = "int") }) }) public class testcase implements serializable {     private static final long serialversionuid = 1l;      @id     @column(name = "testcaseid")     private int id;      @column(name = "testcasename")     private string name;  ... }  @entity public class category implements serializable {     private static final long serialversionuid = 1l;      @id     @column(name = "categoryid")     private int id;      @column(name = "categoryname")     private string name;      @onetomany(fetch = fetchtype.eager)     @joincolumn(name = "categoryid")     @orderby("testcaseid desc")     @filters({             @filter(name = "test_run_id_filter"),             @filter(name = "testcase_name_filter") })     private collection<testcase> testcases;  ... } 

in dao, turn on ones need

public list<category> getcategories(list<integer> testrunids, string category, string testcasename)     {         session session = getsession();           if (testrunids != null && testrunids.size() != 0)         {             session.enablefilter("test_run_id_filter").setparameterlist("ids", testrunids);         }          if (testcasename != null)         {             session.enablefilter("testcase_name_filter").setparameter("testcasename", testcasename);         }          /*          * hibernate wants (left) outer join default.          * bit of hql required inner join.          * query tells hibernate inner join on testcases property inside category object          */          query query = session.createquery("select distinct c category c inner join c.testcases tc");         list<category> result = query.list();         return result;     } 

Comments

Popular posts from this blog

ios - iPhone/iPad different view orientations in different views , and apple approval process -

java Extracting Zip file -

C# WinForm - loading screen -