AutoAnyDeleteImpl.java
package com.github.mygreen.sqlmapper.core.query.auto;
import com.github.mygreen.sqlmapper.core.SqlMapperContext;
import com.github.mygreen.sqlmapper.core.meta.EntityMeta;
import com.github.mygreen.sqlmapper.core.query.IllegalOperateException;
import com.github.mygreen.sqlmapper.metamodel.EntityPath;
import com.github.mygreen.sqlmapper.metamodel.Predicate;
import lombok.Getter;
import lombok.NonNull;
/**
* 任意の条件を指定して削除を行うSQLを自動生成するクエリの実装です。
*
* @author T.TSUCHIE
* @param <T> 処理対象となるエンティティの型
*
*/
public class AutoAnyDeleteImpl<T> implements AutoAnyDelete<T> {
/**
* SqlMapperの設定情報。
*/
@Getter
private final SqlMapperContext context;
@Getter
private final Class<T> baseClass;
@Getter
private final EntityPath<T> entityPath;
@Getter
private final EntityMeta entityMeta;
@Getter
private Integer queryTimeout;
/**
* クライテリアです。
*/
@Getter
private Predicate where;
@SuppressWarnings("unchecked")
public AutoAnyDeleteImpl(@NonNull SqlMapperContext context, @NonNull EntityPath<T> entityPath) {
this.context = context;
this.entityPath = entityPath;
this.entityMeta = context.getEntityMetaFactory().create(entityPath.getType());
this.baseClass = (Class<T>)entityMeta.getEntityType();
validateTarget();
}
private void validateTarget() {
// 読み取り専用かどうかのチェック
if(entityMeta.getTableMeta().isReadOnly()) {
throw new IllegalOperateException(context.getMessageFormatter().create("query.readOnlyEntity")
.paramWithClass("entityType", entityMeta.getEntityType())
.format());
}
}
@Override
public AutoAnyDeleteImpl<T> queryTimeout(int seconds) {
this.queryTimeout = seconds;
return this;
}
@Override
public AutoAnyDeleteImpl<T> where(@NonNull Predicate where) {
this.where = where;
return this;
}
@Override
public int execute() {
return new AutoAnyDeleteExecutor(this)
.execute();
}
}