I am working on an enhancement to a Flex dashboard that will allow the users to save searches. I'm using BlazeDS and Java/Spring/SpringJdbc on the server side.

My question is this: how would you model a search that has one or more criteria, such as:

* Value Date between 2009-10-01 and 2009-10-31
* Currency = 'USD'
* Bank Name starts with 'First'

My first stab at this is to divide the criteria into 3 types:

* Numeric criteria
* Date criteria
* String criteria

Each of the criteria types has a different set of comparison operators:

* Numeric operators: =, >, >=, <, <=, <>
* Date operators: Before, After, Between
* String operators: Starts with, Ends with, contains

I have codes to identify each of these operators. 

My object model is a SearchCriteria interface and 3 classes that implement it: NumericCriteria, DateCriteria, and StringCriteria

All of these classes map to the same table with the following columns:

```
 - SAVED_SEARCH_ID: id of the saved search
 - SEQ_NUM: criteria order. We want to load the criteria in the same order each time
 - CRITERIA_TYPE: Operator code. I can use this later to determine what kind of criteria this is.
 - FIELD: currency, valueDate, bank, etc
 - FIRST_VALUE_NUMERIC
 - SECOND_VALUE_NUMERIC
 - FIRST_VALUE_DATE
 - SECOND_VALUE_DATE
 - FIRST_VALUE_STRING
 - SECOND_VALUE_STRING

```

Is there a cleaner way to do this? I'm not crazy about the data model, but I can't find any resources on this topic... All comments are appreciated, no matter how cruel :)