|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectorg.javalite.activejdbc.Model
public abstract class Model
This class is a super class of all "models" and provides most functionality necessary for implementation of Active Record pattern.
| Field Summary | |
|---|---|
protected Errors |
errors
|
| Constructor Summary | |
|---|---|
protected |
Model()
|
| Method Summary | ||
|---|---|---|
void |
add(Model child)
Adds a new child dependency. |
|
static void |
addCallbacks(CallbackListener... listeners)
|
|
void |
addError(String key,
String value)
Adds a new error to the collection of errors. |
|
static ValidationBuilder |
addValidator(Validator validator)
Adds a validator to the model. |
|
void |
addValidator(Validator validator,
String errorKey)
Binds a validator to an attribute if validation fails. |
|
protected void |
afterCreate()
|
|
protected void |
afterDelete()
|
|
protected void |
afterSave()
|
|
protected void |
afterValidation()
|
|
static List<Association> |
associations()
Returns all associations of this model. |
|
static List<String> |
attributes()
Returns names of all attributes from this model. |
|
void |
beforeClosingBrace(boolean pretty,
String indent,
StringWriter writer)
Override in subclasses in order to inject custom content into Json just before the closing brace. |
|
void |
beforeClosingTag(int spaces,
StringWriter writer,
String... attrs)
Override in a subclass to inject custom content onto XML just before the closing tag. |
|
protected void |
beforeCreate()
|
|
protected void |
beforeDelete()
|
|
protected void |
beforeSave()
|
|
protected void |
beforeValidation()
|
|
static boolean |
belongsTo(Class<? extends Model> targetClass)
|
|
protected static ValidationBuilder |
convertDate(String attributeName,
String format)
Converts a named attribute to java.sql.Date if possible. |
|
protected static ValidationBuilder |
convertTimestamp(String attributeName,
String format)
Converts a named attribute to java.sql.Timestamp if possible. |
|
void |
copyFrom(Model other)
Copies all attribute values (except for ID, created_at and updated_at) from this instance to the other. |
|
|
copyTo(T other)
Copies all attribute values (except for ID, created_at and updated_at) from this instance to the other. |
|
static Long |
count()
Returns total count of records in table. |
|
static Long |
count(String query,
Object... params)
Returns count of records in table under a condition. |
|
static
|
create(Object... namesAndValues)
This is a convenience method to create a model instance already initialized with values. |
|
static
|
createIt(Object... namesAndValues)
This is a convenience method to create(Object...). |
|
void |
defrost()
Synonym for thaw(). |
|
boolean |
delete()
Deletes a single table record represented by this instance. |
|
void |
delete(boolean cascade)
Convenience method, will call delete() or deleteCascade(). |
|
static int |
delete(String query,
Object... params)
Deletes some records from associated table. |
|
static int |
deleteAll()
Deletes all records from associated table. |
|
void |
deleteCascade()
Deletes this record from associated table, as well as children. |
|
void |
deleteCascadeExcept(Association... excludedAssociations)
This method does everything deleteCascade() does, but in addition allows to exclude some assosiations
from this action. |
|
void |
deleteCascadeShallow()
Deletes this record from associated table, as well as its immediate children. |
|
Errors |
errors()
Provides an instance of Errors object, filled with error messages after validation. |
|
Errors |
errors(Locale locale)
Provides an instance of localized Errors object, filled with error messages after validation. |
|
boolean |
exists()
Returns true if record corresponding to the id of this instance exists in the DB. |
|
static boolean |
exists(Object id)
Returns true if record corresponding to the id passed exists in the DB. |
|
static void |
find(String query,
ModelListener listener)
Deprecated. use findWith(ModelListener, String, Object...). |
|
static
|
find(String subquery,
Object... params)
Synonym of where(String, Object...) |
|
static
|
findAll()
This method returns all records from this table. |
|
static
|
findById(Object id)
|
|
static
|
findBySQL(String fullQuery,
Object... params)
Free form query finder. |
|
static
|
findFirst(String subQuery,
Object... params)
Synonym of first(String, Object...). |
|
static void |
findWith(ModelListener listener,
String query,
Object... params)
This method is for processing really large result sets. |
|
static
|
first(String subQuery,
Object... params)
Returns a first result for this condition. |
|
void |
fromMap(Map input)
Overrides attribute values from input map. |
|
boolean |
frozen()
Synonym for isFrozen(). |
|
|
get(Class<T> clazz,
String query,
Object... params)
Provides a list of child models in one to many, many to many and polymorphic associations, but in addition also allows to filter this list by criteria. |
|
Object |
get(String attribute)
Returns a value for attribute. |
|
|
getAll(Class<T> clazz)
This methods supports one to many, many to many relationships as well as polymorphic associations. |
|
protected Map<String,Object> |
getAttributes()
|
|
BigDecimal |
getBigDecimal(String attribute)
Converts Model value to BigDecimal |
|
Boolean |
getBoolean(String attribute)
Returns true if the value is any numeric type and has a value of 1, or if string type has a value of 'y', 't', 'true' or 'yes'. |
|
byte[] |
getBytes(String attribute)
Gets a value as bytes. |
|
Date |
getDate(String attribute)
Performs a conversion to java.sql.Date if necessary,
uses Convert.toSqlDate(Object) |
|
Double |
getDouble(String attribute)
Converts Model value to Double |
|
Float |
getFloat(String attribute)
Converts Model value to Float |
|
Object |
getId()
|
|
String |
getIdName()
|
|
Integer |
getInteger(String attribute)
Converts Model value to Integer |
|
Long |
getLong(String attribute)
Converts Model value to Long |
|
Long |
getLongId()
Convenience method: converts ID value to Long and returns it. |
|
static MetaModel |
getMetaModel()
|
|
protected MetaModel |
getMetaModelLocal()
This method should be called from all instance methods for performance. |
|
String |
getString(String attribute)
Get any value as string. |
|
static String |
getTableName()
|
|
Timestamp |
getTimestamp(String attribute)
If the value is instance of java.sql.Timestamp, returns it, else tries to convert the value to Timestamp using Timestamp.valueOf(String). |
|
static List<Validator> |
getValidators(Class<Model> daClass)
|
|
boolean |
hasErrors()
|
|
protected void |
hydrate(Map attributesMap)
Hydrates a this instance of model from a map. |
|
boolean |
insert()
This method will save a model as new. |
|
boolean |
isFrozen()
Will return true if this instance is frozen, false otherwise. |
|
boolean |
isNew()
returns true if this is a new instance, not saved yet to DB, false otherwise. |
|
boolean |
isValid()
This method performs validations and then returns true if no errors were generated, otherwise returns false. |
|
|
parent(Class<T> parentClass)
Returns parent of this model, assuming that this table represents a child. |
|
static void |
purgeCache()
Use to force-purge cache associated with this table. |
|
void |
readExternal(ObjectInput in)
|
|
void |
refresh()
Re-reads all attribute values from DB. |
|
void |
remove(Model child)
Removes associated child from this instance. |
|
static void |
removeValidator(Validator validator)
|
|
void |
reset()
Resets all data in this model, including the ID. |
|
boolean |
save()
This method will save data from this instance to a corresponding table in the DB. |
|
boolean |
saveIt()
This method will not exit silently like save(), it instead will throw ValidationException
if validations did not pass. |
|
Model |
set(Object... namesAndValues)
This is a convenience method to set multiple values to a model. |
|
void |
set(String[] attributeNames,
Object[] values)
Sets values for this model instance. |
|
Model |
set(String attribute,
Object value)
Sets a value of an attribute. |
|
Model |
setBigDecimal(String attribute,
Object value)
Converts object to BigDecimal when setting. |
|
Model |
setBoolean(String attribute,
Object value)
Sets to true if the value is any numeric type and has a value of 1, or if string type has a
value of 'y', 't', 'true' or 'yes'. |
|
protected void |
setCachedParent(Model parent)
|
|
protected void |
setChildren(Class childClass,
List<Model> children)
|
|
Model |
setDate(String attribute,
Object value)
Converts to java.sql.Date. |
|
Model |
setDouble(String attribute,
Object value)
Converts object to Double when setting. |
|
Model |
setFloat(String attribute,
Object value)
Converts object to Float when setting. |
|
|
setId(Object id)
Convenience method, sets ID value on this model, equivalent to set(getIdName(), id). |
|
Model |
setInteger(String attribute,
Object value)
Converts object to Integer when setting. |
|
Model |
setLong(String attribute,
Object value)
Converts object to Long when setting. |
|
protected void |
setMetamodelLocal(MetaModel metamodelLocal)
|
|
void |
setParent(Model parent)
Sets a parent on this instance. |
|
void |
setParents(Model... parents)
Sets multiple parents on this instance. |
|
Model |
setString(String attribute,
Object value)
Converts object to string when setting. |
|
Model |
setTimestamp(String attribute,
Object value)
Converts object to java.sql.Timestamp when setting. |
|
void |
setTS(String name,
Date date)
Deprecated. use setTimestamp(String, Object) instead. |
|
void |
thaw()
Unfreezes this model. |
|
String |
toInsert()
Generates INSERT SQL based on this model. |
|
String |
toInsert(Formatter... formatters)
TODO: write good JavaDoc, use code inside method above |
|
String |
toInsert(String leftStringQuote,
String rightStringQuote)
Generates INSERT SQL based on this model. |
|
String |
toJson(boolean pretty,
String... attrs)
Generates a JSON document from content of this model. |
|
protected String |
toJsonP(boolean pretty,
String indent,
String... attrs)
|
|
Map<String,Object> |
toMap()
Returns all values of the model with all attribute names converted to lower case, regardless how these names came from DB. |
|
String |
toString()
|
|
String |
toXml(int spaces,
boolean declaration,
String... attrs)
Generates a XML document from content of this model. |
|
static int |
update(String updates,
String conditions,
Object... params)
Updates records associated with this model. |
|
static int |
updateAll(String updates,
Object... params)
Updates all records associated with this model. |
|
void |
validate()
Executes all validators attached to this model. |
|
protected static ValidationBuilder |
validateEmailOf(String attribute)
Validates email format. |
|
protected static NumericValidationBuilder |
validateNumericalityOf(String... attributes)
|
|
protected static ValidationBuilder |
validatePresenceOf(String... attributes)
The validation will not pass if the value is either an empty string "", or null. |
|
protected static ValidationBuilder |
validateRange(String attribute,
Number min,
Number max)
Validates range. |
|
protected static ValidationBuilder |
validateRegexpOf(String attribute,
String pattern)
Validates an attribite format with a ree hand regular expression. |
|
protected static ValidationBuilder |
validateWith(Validator validator)
Add a custom validator to the model. |
|
static
|
where(String subquery,
Object... params)
Finder method for DB queries based on table represented by this model. |
|
void |
writeExternal(ObjectOutput out)
|
|
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
| Field Detail |
|---|
protected Errors errors
| Constructor Detail |
|---|
protected Model()
| Method Detail |
|---|
public static MetaModel getMetaModel()
protected Map<String,Object> getAttributes()
public void fromMap(Map input)
input - map with attributes to overwrite this models'. Keys are names of attributes of this model, values
are new values for it.protected void hydrate(Map attributesMap)
attributesMap - map containing values for this instance.public <T extends Model> T setId(Object id)
set(getIdName(), id).
id - value of ID
public Model setDate(String attribute,
Object value)
java.sql.Date. Expects a java.sql.Date,
java.sql.Timestamp, java.sql.Time, java.util.Date or
any object with string with format: yyyy-mm-dd.
attribute - name of attribute.value - value to convert.
public Date getDate(String attribute)
java.sql.Date if necessary,
uses Convert.toSqlDate(Object)
attribute - attribute name
java.sql.Date
public void setTS(String name,
Date date)
setTimestamp(String, Object) instead.
java.util.Date to java.sql.Timestamp
based on the time value.
name - name of field.date - date value.
public void set(String[] attributeNames,
Object[] values)
attributeNames - names of attributes.values - values for this instance.
public Model set(String attribute,
Object value)
attribute - name of attribute to set. Names not related to this model will be rejected (those not matching table columns).value - value of attribute. Feel free to set any type, as long as it can be accepted by your driver.
public boolean isFrozen()
public static List<String> attributes()
public static List<Association> associations()
public boolean isNew()
public boolean frozen()
isFrozen(). if(m.frozen()) seems to read better than classical Java convention.
public boolean delete()
frozen() and cannot be used anymore until thaw() is called.
public void delete(boolean cascade)
delete() or deleteCascade().
cascade - true to call deleteCascade(), false to call delete().public void deleteCascade()
DOCTORS
+----+------------+-----------+-----------------+
| id | first_name | last_name | discipline |
+----+------------+-----------+-----------------+
| 1 | John | Kentor | otolaryngology |
| 2 | Hellen | Hunt | dentistry |
| 3 | John | Druker | oncology |
+----+------------+-----------+-----------------+
PATIENTS
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
| 1 | Jim | Cary |
| 2 | John | Carpenter |
| 3 | John | Doe |
+----+------------+-----------+
DOCTORS_PATIENTS
+----+-----------+------------+
| id | doctor_id | patient_id |
+----+-----------+------------+
| 1 | 1 | 2 |
| 2 | 1 | 1 |
| 3 | 2 | 1 |
| 4 | 3 | 3 |
+----+-----------+------------+
PRESCRIPTIONS
+----+------------------------+------------+
| id | name | patient_id |
+----+------------------------+------------+
| 1 | Viagra | 1 |
| 2 | Prozac | 1 |
| 3 | Valium | 2 |
| 4 | Marijuana (medicinal) | 2 |
| 5 | CML treatment | 3 |
+----+------------------------+------------+
Lets start with a simple example, Doctor John Druker. This doctor has one patient John Doe, and the patient has one prescription.
So, when an instance of this doctor model is issued statement:
drDruker.deleteCascade();
, the result is as expected: the DOCTORS:ID=3 is deleted, DOCTORS_PATIENTS:ID=4 is deleted, PATIENTS:ID=3 is deleted
and PRESCRIPTIONS:ID=5 is deleted.
However, when doctor Kentor(#1) is deleted, the following records are also deleted:
frozen() and cannot be used anymore until thaw() is called.
public void deleteCascadeExcept(Association... excludedAssociations)
deleteCascade() does, but in addition allows to exclude some assosiations
from this action. This is necessary because deleteCascade() method can be far too eager to delete
records in a database, and this is a good way to tell the model to exclude some associations from deletes.
Example:
Patient.findById(3).deleteCascadeExcept(Patient.getMetaModel().getAssociationForTarget("prescriptions"));
excludedAssociations - associations#deleteCascade()} - see for more information.public void deleteCascadeShallow()
deleteCascade() does, but rather issues
one DELETE statement per child dependency table. Also, its semantics are a bit different between than deleteCascade().
It only deletes current record and immediate children, but not their children (no grand kinds are dead as a result :)).
frozen() and cannot be used anymore until thaw() is called.
public static int delete(String query,
Object... params)
query - narrows which records to delete. Example: "last_name like '%sen%'".
params - (optional) - list of parameters if a query is parametrized.
public static boolean exists(Object id)
id - id in question.
public boolean exists()
public static int deleteAll()
public static int update(String updates,
String conditions,
Object... params)
Employee.update("bonus = ?", "years_at_company > ?", "5", "10");
updates - - what needs to be updated.conditions - specifies which records to update. If this argument is null, all records in table will be updated.
In such cases, use a more explicit updateAll(String, Object...) method.params - list of parameters for both updates and conditions. Applied in the same order as in the arguments,
updates first, then conditions.
public static int updateAll(String updates,
Object... params)
Employee.updateAll("bonus = ?", "10");
updates - - what needs to be updated.params - list of parameters for both updates and conditions. Applied in the same order as in the arguments,
updates first, then conditions.
public Map<String,Object> toMap()
LazyList.include(Class[]) method was used, and this
model belongs to a parent (as in many to one relationship), then the parent
will be eagerly loaded and also converted to a map. Parents' maps are keyed in the
returned map by underscored name of a parent model class name.
For example, if this model were Address
and a parent is User (and user has many addresses), then the resulting map would
have all the attributes of the current table and another map representing a parent user with a
key "user" in current map.
public String toString()
toString in class Object
public String toXml(int spaces,
boolean declaration,
String... attrs)
spaces - by how many spaces to indent.declaration - tru to include XML declaration at the topattrs - list of attributes to include. No arguments == include all attributes.
public void beforeClosingTag(int spaces,
StringWriter writer,
String... attrs)
spaces - number of spaces of indentwriter - to write content to.
public String toJson(boolean pretty,
String... attrs)
pretty - pretty format (human readable), or one line text.attrs - list of attributes to include. No arguments == include all attributes.
protected String toJsonP(boolean pretty,
String indent,
String... attrs)
public void beforeClosingBrace(boolean pretty,
String indent,
StringWriter writer)
indent - indent at current levelwriter - writer to write custom content topublic <T extends Model> T parent(Class<T> parentClass)
null in cases when you have orphan record and
referential integrity is not enforced in DBMS with a foreign key constraint.
parentClass - class of a parent model.
protected void setCachedParent(Model parent)
public void setParents(Model... parents)
parents - - collection of potential parents of this instance. Its ID values must not be null.public void setParent(Model parent)
parent - potential parent of this instance. Its ID value must not be null.public <T extends Model> void copyTo(T other)
other - target model.public void copyFrom(Model other)
other - target model.protected MetaModel getMetaModelLocal()
protected void setMetamodelLocal(MetaModel metamodelLocal)
public void refresh()
public Object get(String attribute)
Address address = ...;
User user = (User)address.get("user");
Conversely, this will also work:
List<Address> addresses = (List<Address>)user.get("addresses");
The same would also work for many to many relationships:
List<Doctor> doctors = (List<Doctor>)patient.get("doctors");
...
List<Patient> patients = (List<Patient>)doctor.get("patients");
This methods will try to infer a name if a table by using Inflector to try to
convert it to singular and them plural form, an attempting to see if this model has an appropriate relationship
with another model, if one is found. This method of finding of relationships is best used in templating
technologies, such as JSPs. For standard cases, please use parent(Class), and getAll(Class).
In some cases, the inference of relationships might take a toll on performance, and if a project is not using
the getter method for inference, than it is wise to turn it off with a system property activejdbc.get.inference:
-Dactivejdbc.get.inference = false
If inference is turned off, only a value of the attribute is returned.
attribute - name of attribute of name or related object.
public String getString(String attribute)
attribute - name of attribute.
public byte[] getBytes(String attribute)
attribute - name of attribute
public BigDecimal getBigDecimal(String attribute)
BigDecimal
attribute - name of attribute to convert
Convert#toBigDecimal}public Integer getInteger(String attribute)
Integer
attribute - name of attribute to convert
Convert#toInteger}public Long getLong(String attribute)
Long
attribute - name of attribute to convert
Convert#toLong(Object)}public Float getFloat(String attribute)
Float
attribute - name of attribute to convert
Convert#toFloat(Object)}public Timestamp getTimestamp(String attribute)
Timestamp.valueOf(String).
This method might trow IllegalArgumentException if fails at conversion.
attribute - attribute name
Timestamp#valueOf(String)}public Double getDouble(String attribute)
Double
attribute - name of attribute to convert
Convert#toDouble(Object)}public Boolean getBoolean(String attribute)
attribute - attribute name
public Model setString(String attribute,
Object value)
attribute - name of attribute.value - value
public Model setBigDecimal(String attribute,
Object value)
attribute - name of attribute.value - value
public Model setInteger(String attribute,
Object value)
Integer when setting.
attribute - name of attribute.value - value
public Model setLong(String attribute,
Object value)
Long when setting.
attribute - name of attribute.value - value
public Model setFloat(String attribute,
Object value)
Float when setting.
attribute - name of attribute.value - value
public Model setTimestamp(String attribute,
Object value)
java.sql.Timestamp when setting.
If the value is instance of java.sql.Timestamp, just sets it, else tries to convert the value to Timestamp using
Timestamp.valueOf(String). This method might trow IllegalArgumentException if fails at conversion.
attribute - name of attribute.value - value
public Model setDouble(String attribute,
Object value)
Double when setting.
attribute - name of attribute.value - value
public Model setBoolean(String attribute,
Object value)
true if the value is any numeric type and has a value of 1, or if string type has a
value of 'y', 't', 'true' or 'yes'. Otherwise, sets to false.
attribute - name of attribute.value - value to convert.
public <T extends Model> LazyList<T> getAll(Class<T> clazz)
clazz must be a class of a child model, and it will return a
collection of all children.
In case of many to many, the clazz must be a class of a another related model, and it will return a
collection of all related models.
In case of polymorphic, the clazz must be a class of a polymorphically related model, and it will return a
collection of all related models.
clazz - class of a child model for one to many, or class of another model, in case of many to many or class of child in case of
polymorphic
public <T extends Model> LazyList<T> get(Class<T> clazz,
String query,
Object... params)
duration_weeks:
Listwhere this list will contain all projects to which this programmer is assigned for 3 weeks.threeWeekProjects = programmer.get(Project.class, "duration_weeks = ?", 3);
clazz - related typequery - sub-query for join table.params - parameters for a sub-query
protected static NumericValidationBuilder validateNumericalityOf(String... attributes)
public static ValidationBuilder addValidator(Validator validator)
validator - new validator.
public void addError(String key,
String value)
key - - key wy which this error can be retrieved from a collection of errors: errors().value - - this is a key of the message in the resource bundle.Messages}.public static void removeValidator(Validator validator)
public static List<Validator> getValidators(Class<Model> daClass)
protected static ValidationBuilder validateRegexpOf(String attribute,
String pattern)
attribute - attribute to validate.pattern - regexp pattern which must match the value.
protected static ValidationBuilder validateEmailOf(String attribute)
attribute - name of atribute that holds email value.
protected static ValidationBuilder validateRange(String attribute,
Number min,
Number max)
attribute - attribute to validate - should be within range.min - min value of range.max - max value of range.
protected static ValidationBuilder validatePresenceOf(String... attributes)
attributes - list of attributes to validate.
protected static ValidationBuilder validateWith(Validator validator)
validator - custom validator.
protected static ValidationBuilder convertDate(String attributeName,
String format)
java.sql.Date if possible.
Acts as a validator if cannot make a conversion.
attributeName - name of attribute to convert to java.sql.Date.format - format for conversion. Refer to SimpleDateFormat
protected static ValidationBuilder convertTimestamp(String attributeName,
String format)
java.sql.Timestamp if possible.
Acts as a validator if cannot make a conversion.
attributeName - name of attribute to convert to java.sql.Timestamp.format - format for conversion. Refer to SimpleDateFormat
public static boolean belongsTo(Class<? extends Model> targetClass)
public static void addCallbacks(CallbackListener... listeners)
public boolean isValid()
public void validate()
public boolean hasErrors()
public void addValidator(Validator validator,
String errorKey)
errorKey - key of error in errors map. Usually this is a name of attribute,
but not limited to that, can be anything.validator - -validator that failed validation.public Errors errors()
Errors object, filled with error messages after validation.
Errors object, filled with error messages after validation.public Errors errors(Locale locale)
Errors object, filled with error messages after validation.
locale - locale.
Errors object, filled with error messages after validation.public static <T extends Model> T create(Object... namesAndValues)
Person p = Person.create("name", "Sam", "last_name", "Margulis", "dob", "2001-01-07");
The first (index 0) and every other element in the array is an attribute name, while the second (index 1) and every
other is a corresponding value.
This allows for better readability of code. If you just read this aloud, it will become clear.
namesAndValues - names and values. elements at indexes 0, 2, 4, 8... are attribute names, and elements at
indexes 1, 3, 5... are values. Element at index 1 is a value for attribute at index 0 and so on.
public Model set(Object... namesAndValues)
Person p = ...
Person p = p.set("name", "Sam", "last_name", "Margulis", "dob", "2001-01-07");
The first (index 0) and every other element in the array is an attribute name, while the second (index 1) and every
other is a corresponding value.
This allows for better readability of code. If you just read this aloud, it will become clear.
namesAndValues - names and values. elements at indexes 0, 2, 4, 8... are attribute names, and elements at
indexes 1, 3, 5... are values. Element at index 1 is a value for attribute at index 0 and so on.
public static <T extends Model> T createIt(Object... namesAndValues)
create(Object...). It will create a new model and will save it
to DB. It has the same semantics as saveIt().
namesAndValues - names and values. elements at indexes 0, 2, 4, 8... are attribute names, and elements at
indexes 1, 3, 5... are values. Element at index 1 is a value for attribute at index 0 and so on.
public static <T extends Model> T findById(Object id)
public static <T extends Model> LazyList<T> where(String subquery,
Object... params)
"select * from table_name where " + subquery where table_name is a table represented by this model.
Code example:
ListLimit, offset and order by can be chained like this:teenagers = Person.where("age > ? and age < ?", 12, 20); // iterate... //same can be achieved (since parameters are optional): List teenagers = Person.where("age > 12 and age < 20"); //iterate
ListThis is a great way to build paged applications.teenagers = Person.where("age > ? and age < ?", 12, 20).offset(101).limit(20).orderBy(age); //iterate
subquery - this is a set of conditions that normally follow the "where" clause. Example:
"department = ? and dob > ?". If this value is "*" and no parameters provided, then findAll() is executed.params - list of parameters corresponding to the place holders in the subquery.
LazyList containing results.
public static <T extends Model> LazyList<T> find(String subquery,
Object... params)
where(String, Object...)
subquery - this is a set of conditions that normally follow the "where" clause. Example:
"department = ? and dob > ?". If this value is "*" and no parameters provided, then findAll() is executed.params - list of parameters corresponding to the place holders in the subquery.
LazyList containing results.
public static <T extends Model> T findFirst(String subQuery,
Object... params)
first(String, Object...).
subQuery - selection criteria, example:
Person johnTheTeenager = Person.findFirst("name = ? and age > 13 and age < 19 order by age", "John")
Sometimes a query might be just a clause like this:
Person oldest = Person.findFirst("order by age desc")
params - list of parameters if question marks are used as placeholders
public static <T extends Model> T first(String subQuery,
Object... params)
findFirst(String, Object...).
//first:
Person youngestTeenager= Person.first("age > 12 and age < 20 order by age");
//last:
Person oldestTeenager= Person.first("age > 12 and age < 20 order by age desc");
subQuery - selection criteria, example:
Person johnTheTeenager = Person.first("name = ? and age < 13 order by age", "John")
Sometimes a query might be just a clause like this:
Person p = Person.first("order by age desc")
params - list of parameters if question marks are used as placeholders
public static void find(String query,
ModelListener listener)
findWith(ModelListener, String, Object...).
query - query text.listener - this is a call back implementation which will receive instances of models found.
public static void findWith(ModelListener listener,
String query,
Object... params)
listener - this is a call back implementation which will receive instances of models found.query - sub-query (content after "WHERE" clause)params - optional parameters for a query.
public static <T extends Model> LazyList<T> findBySQL(String fullQuery,
Object... params)
ListEnsure that the query returns all columns associated with this model, so that the resulting models could hydrate itself properly. Returned columns that are not part of this model will be ignored, but can be used for caluses like above.rules = Rule.findBySQL("select rule.*, goal_identifier from rule, goal where goal.goal_id = rule.goal_id order by goal_identifier asc, rule_type desc");
T - - class that extends Model.fullQuery - free-form SQL.params - parameters if query is parametrized.
public static <T extends Model> LazyList<T> findAll()
public void add(Model child)
parent_id and parent_type as appropriate and then will then save the child.NotAssociatedException in case a model that has no relationship is passed.
child - instance of a model that has a relationship to the current model.
Either one to many or many to many relationships are accepted.public void remove(Model child)
child.delete() method. This will render the child object frozen.
NotAssociatedException in case a model that has no relationship is passed.
child - model representing a "child" as in one to many or many to many association with this model.public boolean saveIt()
save(), it instead will throw ValidationException
if validations did not pass.
public void reset()
public void thaw()
defrost().
public void defrost()
thaw().
public boolean save()
save() method is mostly for web applications, where code like this is written:
if(person.save())
//show page success
else{
request.setAttribute("errors", person.errors());
//show errors page, or same page so that user can correct errors.
}
In other words, this method will not throw validation exceptions. However, if there is a problem in the DB, then
there can be a runtime exception thrown.
public static Long count()
public static Long count(String query,
Object... params)
query - query to select records to count.params - parameters (if any) for the query.
public boolean insert()
public static String getTableName()
public Object getId()
public String getIdName()
protected void setChildren(Class childClass,
List<Model> children)
public String toInsert()
String insert = u.toInsert(); //yields this output: //INSERT INTO users (id, first_name, email, last_name) VALUES (1, 'Marilyn', 'mmonroe@yahoo.com', 'Monroe');
public String toInsert(String leftStringQuote,
String rightStringQuote)
java.sql.Timestamp and java.sql.Date types.
Example:
String insert = u.toInsert("q'{", "}'");
//yields this output
//INSERT INTO users (id, first_name, email, last_name) VALUES (1, q'{Marilyn}', q'{mmonroe@yahoo.com}', q'{Monroe}');
leftStringQuote - - left quote for a string value, this can be different for different databases.rightStringQuote - - left quote for a string value, this can be different for different databases.
public String toInsert(Formatter... formatters)
formatters -
public static void purgeCache()
public Long getLongId()
getIdName(), converted to Long.
public void writeExternal(ObjectOutput out)
throws IOException
writeExternal in interface ExternalizableIOException
public void readExternal(ObjectInput in)
throws IOException,
ClassNotFoundException
readExternal in interface ExternalizableIOException
ClassNotFoundExceptionprotected void beforeSave()
protected void afterSave()
protected void beforeCreate()
protected void afterCreate()
protected void beforeDelete()
protected void afterDelete()
protected void beforeValidation()
protected void afterValidation()
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||