/** * <p> * Provides {@link MetaModel} object related to this model class. * </p> * Synonym of {@link #metaModel()}. * * @return {@link MetaModel} object related to this model class. */ public static MetaModel getMetaModel() { return metaModelOf(modelClass()); }
/** * Synonym of {@link #getMetaModel()}. * * @return {@link MetaModel} of this model. */ public static MetaModel metaModel() { return metaModelOf(modelClass()); }
public static Set<String> attributeNames(Class<? extends Model> clazz) { return metaModelOf(clazz).getAttributeNames(); }
public static int update(Class<? extends Model> clazz, String updates, String conditions, Object... params) { return update(metaModelOf(clazz), updates, conditions, params); }
public static <T extends Model> LazyList<T> findBySql(Class<T> clazz, String fullQuery, Object... params) { return new LazyList<>(false, metaModelOf(clazz), fullQuery, params); }
public static <T extends Model> LazyList<T> findAll(Class<T> clazz) { return new LazyList(null, metaModelOf(clazz)); }
protected Model() { metaModelLocal = metaModelOf(getClass()); modelRegistryLocal = Registry.instance().modelRegistryOf(this.getClass()); }
@Override public String selectManyToManyAssociation(Many2ManyAssociation association, String sourceFkColumnName, int questionsCount) { String targetTable = metaModelOf(association.getTargetClass()).getTableName(); StringBuilder query = new StringBuilder().append("SELECT ").append(targetTable).append(".*, t.") .append(association.getSourceFkName()).append(" AS ").append(sourceFkColumnName).append(" FROM ") .append(targetTable).append(" INNER JOIN ").append(association.getJoin()).append(" t ON ") .append(targetTable).append('.').append(association.getTargetPk()).append(" = t.") .append(association.getTargetFkName()).append(" WHERE t.").append(association.getSourceFkName()) .append(" IN ("); appendQuestions(query, questionsCount); query.append(')'); return query.toString(); }
public static <T extends Model> LazyList<T> where(Class<T> clazz, String subquery, Object... params) { if (subquery.trim().equals("*")) { if (empty(params)) { return findAll(clazz); } else { throw new IllegalArgumentException( "cannot provide parameters with query: '*', use findAll() method instead"); } } return new LazyList<>(subquery, metaModelOf(clazz), params); }
public static boolean belongsTo(Class<? extends Model> clazz, Class<? extends Model> targetClass) { MetaModel metaModel = metaModelOf(clazz); return (null != metaModel.getAssociationForTarget(targetClass, BelongsToAssociation.class) || null != metaModel.getAssociationForTarget(targetClass, Many2ManyAssociation.class)); }
public static void purgeCache(Class<? extends Model> clazz) { MetaModel metaModel = metaModelOf(clazz); if (metaModel.cached()) { Registry.cacheManager().purgeTableCache(metaModel); } }
public static <T extends Model> T findFirst(Class<T> clazz, String subQuery, Object... params) { LazyList<T> list = new LazyList<T>(subQuery, metaModelOf(clazz), params).limit(1); return list.isEmpty() ? null : list.get(0); }
@Override public void validate(Model model) { MetaModel metaModel = metaModelOf(model.getClass()); if (new DB(metaModel.getDbName()).count(metaModel.getTableName(), attribute + " = ?", model.get(attribute)) > 0) { model.addValidator(this, attribute); } } }
public static <T extends Model> T findById(Class<T> clazz, Object id) { if (id == null) { return null; } MetaModel metaModel = metaModelOf(clazz); LazyList<T> list = new LazyList<T>(metaModel.getIdName() + " = ?", metaModel, id).limit(1); return list.isEmpty() ? null : list.get(0); }
public static boolean exists(Class<? extends Model> clazz, Object id) { MetaModel metaModel = metaModelOf(clazz); return null != new DB(metaModel.getDbName()).firstCell(metaModel.getDialect().selectExists(metaModel), id); }
public static <T extends Model, M extends T> void findWith(final Class<M> clazz, final ModelListener<T> listener, String query, Object... params) { long start = System.currentTimeMillis(); final MetaModel metaModel = metaModelOf(clazz); String sql = metaModel.getDialect().selectStar(metaModel.getTableName(), query); new DB(metaModel.getDbName()).find(sql, params).with(new RowListenerAdapter() { @Override public void onNext(Map<String, Object> row) { listener.onModel(instance(row, metaModel, clazz)); } }); LogFilter.logQuery(LOGGER, sql, null, start); }
/** * Deletes immediate children. */ private void deleteOne2ManyChildrenShallow(OneToManyAssociation association){ String targetTable = metaModelOf(association.getTargetClass()).getTableName(); new DB(metaModelLocal.getDbName()).exec("DELETE FROM " + targetTable + " WHERE " + association.getFkName() + " = ?", getId()); }
/** * Deletes immediate polymorphic children */ private void deletePolymorphicChildrenShallow(OneToManyPolymorphicAssociation association){ String targetTable = metaModelOf(association.getTargetClass()).getTableName(); String parentType = association.getTypeLabel(); new DB(metaModelLocal.getDbName()).exec("DELETE FROM " + targetTable + " WHERE parent_id = ? AND parent_type = ?", getId(), parentType); }
public static int deleteAll(Class<? extends Model> clazz) { MetaModel metaModel = metaModelOf(clazz); int count = new DB(metaModel.getDbName()).exec("DELETE FROM " + metaModel.getTableName()); if (metaModel.cached()) { Registry.cacheManager().purgeTableCache(metaModel); } purgeEdges(metaModel); return count; }
public static int delete(Class<? extends Model> clazz, String query, Object... params) { MetaModel metaModel = metaModelOf(clazz); //TODO: refactor this: int count = (params == null || params.length == 0) ? new DB(metaModel.getDbName()).exec("DELETE FROM " + metaModel.getTableName() + " WHERE " + query) : new DB(metaModel.getDbName()).exec("DELETE FROM " + metaModel.getTableName() + " WHERE " + query, params); if (metaModel.cached()) { Registry.cacheManager().purgeTableCache(metaModel); } purgeEdges(metaModel); return count; }