OSDN Git Service

DBFlute-0.9.3に更新
[ea2ddl/ea2ddl.git] / ea2ddl-gen / dbflute-0.9.3 / templates / om / java / bsbhv / BaseBhv.vm
@@ -1,45 +1,50 @@
 ${database.allClassCopyright}package ${glPackageBaseBhv};\r
-\r
 #set ($myClassName = "${myBaseBhvClassName}")\r
 \r
 import java.util.List;\r
 \r
-import ${glPackageBaseCommon}.*;\r
+import org.seasar.dbflute.*;\r
 #if (${table.hasOnlyOnePrimaryKey()} && $table.hasReferrerAsMany())\r
-import ${glPackageBaseCommonBhvLoad}.${glLoadReferrerOptionName};\r
-import ${glPackageBaseCommonBhvSetup}.${glConditionBeanSetupperName};\r
+import org.seasar.dbflute.bhv.ConditionBeanSetupper;\r
+import org.seasar.dbflute.bhv.LoadReferrerOption;\r
 #end\r
-import ${glPackageBaseCommonBhvSetup}.${glValueLabelSetupperName};\r
+#if ($table.isAvailableNonPrimaryKeyWritable())\r
+import org.seasar.dbflute.bhv.core.command.InsertEntityCommand;\r
+#end\r
+import org.seasar.dbflute.cbean.ConditionBean;\r
+import org.seasar.dbflute.cbean.EntityRowHandler;\r
+import org.seasar.dbflute.cbean.ListResultBean;\r
+import org.seasar.dbflute.cbean.PagingBean;\r
+import org.seasar.dbflute.cbean.PagingHandler;\r
+import org.seasar.dbflute.cbean.PagingInvoker;\r
+import org.seasar.dbflute.cbean.PagingResultBean;\r
+import org.seasar.dbflute.cbean.ResultBeanBuilder;\r
+import org.seasar.dbflute.dbmeta.DBMeta;\r
 #if ($database.isMakeFlatExpansion())\r
-import ${glPackageBaseCommonDBMetaHierarchy}.${glHierarchyArrangerName};\r
-import ${glPackageBaseCommonDBMetaHierarchy}.${glHierarchyBasicRequestName};\r
-import ${glPackageBaseCommonDBMetaHierarchy}.${glHierarchyRequestName};\r
-#end\r
-import ${glPackageBaseCommonCBean}.${glConditionBeanInterfaceName};\r
-import ${glPackageBaseCommonCBean}.${glListResultBeanName};\r
-import ${glPackageBaseCommonCBean}.${glResultBeanBuilderName};\r
-import ${glPackageBaseCommonCBean}.${glPagingHandlerName};\r
-import ${glPackageBaseCommonCBean}.${glPagingInvokerName};\r
-import ${glPackageBaseCommonCBean}.${glPagingBeanInterfaceName};\r
-import ${glPackageBaseCommonCBean}.${glPagingResultBeanName};\r
-import ${glPackageBaseCommonDBMeta}.${glDBMetaInterfaceName};\r
+import org.seasar.dbflute.dbmeta.hierarchy.HierarchyArranger;\r
+import org.seasar.dbflute.dbmeta.hierarchy.HierarchyBasicRequest;\r
+import org.seasar.dbflute.dbmeta.hierarchy.HierarchyRequest;\r
+#end\r
+import org.seasar.dbflute.jdbc.StatementConfig;\r
+import ${glPackageBaseCommon}.*;\r
 #if (${table.hasOnlyOnePrimaryKey()} && $table.hasReferrerAsMany())\r
 import ${glPackageExtendedBhv}.*;\r
 #end\r
-import ${glPackageExtendedDao}.*;\r
 import ${glPackageExtendedEntity}.*;\r
 import ${myDBMetaPackageName}.*;\r
 import ${glPackageCB}.*;\r
 \r
 #set ($myExtendClassName = "")\r
 #if ($table.isWritable())\r
-  #set ($myExtendClassName = "${glBehaviorWritableAbstractName}")\r
+  #set ($myExtendClassName = "AbstractBehaviorWritable")\r
 #else\r
-  #set ($myExtendClassName = "${glBehaviorReadableAbstractName}")\r
+  #set ($myExtendClassName = "AbstractBehaviorReadable")\r
 #end\r
-\r
 /**\r
- * The behavior of ${table.name}.\r
+ * The behavior of ${table.basicInfoDispString}. <br />\r
+#if ($table.isBuriInternal())\r
+ * {Buri Internal}\r
+#end\r
  * <pre>\r
  * [primary-key]\r
  *     ${table.primaryKeyNameCommaString}\r
@@ -70,7 +75,7 @@ import ${glPackageCB}.*;
  * </pre>\r
  * @author ${database.ClassAuthor}\r
  */\r
-public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExtendClassName} {\r
+public abstract class ${myClassName} extends org.seasar.dbflute.bhv.${myExtendClassName} {\r
 \r
     // ===================================================================================\r
     //                                                                          Definition\r
@@ -79,11 +84,6 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     ${database.behaviorQueryPathEndMark}\r
 \r
     // ===================================================================================\r
-    //                                                                           Attribute\r
-    //                                                                           =========\r
-    protected ${myExtendedDaoClassName} _dao;\r
-\r
-    // ===================================================================================\r
     //                                                                          Table name\r
     //                                                                          ==========\r
     /** @return The name on database of table. (NotNull) */\r
@@ -92,42 +92,62 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     // ===================================================================================\r
     //                                                                              DBMeta\r
     //                                                                              ======\r
-    /** @return The meta data of the database. (NotNull) */\r
-    public ${glDBMetaInterfaceName} getDBMeta() { return ${myDBMetaClassName}.getInstance(); }\r
+    /** @return The instance of DBMeta. (NotNull) */\r
+    public DBMeta getDBMeta() { return ${myDBMetaClassName}.getInstance(); }\r
 \r
-    /** @return The meta data of the database as my table type. (NotNull) */\r
+    /** @return The instance of DBMeta as my table type. (NotNull) */\r
     public ${myDBMetaClassName} getMyDBMeta() { return ${myDBMetaClassName}.getInstance(); }\r
 \r
     // ===================================================================================\r
-    //                                                                        Dao Accessor\r
-    //                                                                        ============\r
-    public ${myExtendedDaoClassName} getMyDao() { return _dao; }\r
-    public void setMyDao(${myExtendedDaoClassName} dao) { assertObjectNotNull("dao", dao); _dao = dao; }\r
-    public ${glDaoReadableInterfaceName} getDaoReadable() { return getMyDao(); }\r
-#if ($table.isWritable())\r
-    public ${glDaoWritableInterfaceName} getDaoWritable() { return getMyDao(); }\r
-#end\r
-\r
-    // ===================================================================================\r
     //                                                                        New Instance\r
     //                                                                        ============\r
-    public ${glEntityInterfaceName} newEntity() { return newMyEntity(); }\r
-    public ${glConditionBeanInterfaceName} newConditionBean() { return newMyConditionBean(); }\r
+    public Entity newEntity() { return newMyEntity(); }\r
+    public ConditionBean newConditionBean() { return newMyConditionBean(); }\r
     public ${myExtendedObjectClassName} newMyEntity() { return new ${myExtendedObjectClassName}(); }\r
     public ${myConditionBeanClassName} newMyConditionBean() { return new ${myConditionBeanClassName}(); }\r
 \r
     // ===================================================================================\r
+    //                                                                       Current DBDef\r
+    //                                                                       =============\r
+    @Override\r
+    protected DBDef getCurrentDBDef() {\r
+        return ${glDBCurrent}.getInstance().currentDBDef();\r
+    }\r
+\r
+    // ===================================================================================\r
+    //                                                             Default StatementConfig\r
+    //                                                             =======================\r
+    @Override\r
+    protected StatementConfig getDefaultStatementConfig() {\r
+        return ${glDBFluteConfig}.getInstance().getDefaultStatementConfig();\r
+    }\r
+    \r
+    // ===================================================================================\r
     //                                                                        Count Select\r
     //                                                                        ============\r
     /**\r
-     * Select the count of the condition-bean. {IgnorePagingCondition}\r
+     * Select the count by the condition-bean. {IgnorePagingCondition}\r
      * @param cb The condition-bean of ${myExtendedObjectClassName}. (NotNull)\r
      * @return The selected count.\r
      */\r
     public int selectCount(${myConditionBeanClassName} cb) {\r
-        assertConditionBeanNotNull(cb);\r
+        assertCBNotNull(cb);\r
         return delegateSelectCount(cb);\r
     }\r
+    \r
+    // ===================================================================================\r
+    //                                                                       Cursor Select\r
+    //                                                                       =============\r
+    /**\r
+     * Select the cursor by the condition-bean. <br />\r
+     * Attention: It has a mapping cost from result set to entity.\r
+     * @param cb The condition-bean of ${myExtendedObjectClassName}. (NotNull)\r
+     * @param entityRowHandler The handler of entity row of ${myExtendedObjectClassName}. (NotNull)\r
+     */\r
+    public void selectCursor(${myConditionBeanClassName} cb, EntityRowHandler<${myExtendedObjectClassName}> entityRowHandler) {\r
+        assertCBNotNull(cb); assertObjectNotNull("entityRowHandler<${myExtendedObjectClassName}>", entityRowHandler);\r
+        delegateSelectCursor(cb, entityRowHandler);\r
+    }\r
 \r
     // ===================================================================================\r
     //                                                                       Entity Select\r
@@ -136,7 +156,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * Select the entity by the condition-bean.\r
      * @param cb The condition-bean of ${myExtendedObjectClassName}. (NotNull)\r
      * @return The selected entity. (Nullalble)\r
-     * @exception ${glPackageBaseCommonException}.${glEntityDuplicatedException} When the entity has been duplicated.\r
+     * @exception org.seasar.dbflute.exception.EntityDuplicatedException When the entity has been duplicated.\r
      */\r
     public ${myExtendedObjectClassName} selectEntity(final ${myConditionBeanClassName} cb) {\r
         return helpSelectEntityInternally(cb, new InternalSelectEntityCallback<${myExtendedObjectClassName}, ${myConditionBeanClassName}>() {\r
@@ -147,8 +167,8 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * Select the entity by the condition-bean with deleted check.\r
      * @param cb The condition-bean of ${myExtendedObjectClassName}. (NotNull)\r
      * @return The selected entity. (NotNull)\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException} When the entity has already been deleted.\r
-     * @exception ${glPackageBaseCommonException}.${glEntityDuplicatedException} When the entity has been duplicated.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException When the entity has already been deleted.\r
+     * @exception org.seasar.dbflute.exception.EntityDuplicatedException When the entity has been duplicated.\r
      */\r
     public ${myExtendedObjectClassName} selectEntityWithDeletedCheck(final ${myConditionBeanClassName} cb) {\r
         return helpSelectEntityWithDeletedCheckInternally(cb, new InternalSelectEntityWithDeletedCheckCallback<${myExtendedObjectClassName}, ${myConditionBeanClassName}>() {\r
@@ -160,8 +180,8 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * Select the entity with deleted check. {by primary-key value}\r
      * @param primaryKey The keys of primary.\r
      * @return The selected entity. (NotNull)\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException} When the entity has already been deleted.\r
-     * @exception ${glPackageBaseCommonException}.${glEntityDuplicatedException} When the entity has been duplicated.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException When the entity has already been deleted.\r
+     * @exception org.seasar.dbflute.exception.EntityDuplicatedException When the entity has been duplicated.\r
      */\r
     public ${myExtendedObjectClassName} selectByPKValueWithDeletedCheck(${table.PrimaryKeyArgsString}) {\r
         ${myExtendedObjectClassName} entity = new ${myExtendedObjectClassName}();\r
@@ -180,9 +200,9 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * @param cb The condition-bean of ${myExtendedObjectClassName}. (NotNull)\r
      * @return The result bean of selected list. (NotNull)\r
      */\r
-    public ${glListResultBeanName}<${myExtendedObjectClassName}> selectList(${myConditionBeanClassName} cb) {\r
-        assertConditionBeanNotNull(cb);\r
-        return new ${glResultBeanBuilderName}<${myExtendedObjectClassName}>(getTableDbName()).buildListResultBean(cb, delegateSelectList(cb));\r
+    public ListResultBean<${myExtendedObjectClassName}> selectList(${myConditionBeanClassName} cb) {\r
+        assertCBNotNull(cb);\r
+        return new ResultBeanBuilder<${myExtendedObjectClassName}>(getTableDbName()).buildListResultBean(cb, delegateSelectList(cb));\r
     }\r
 \r
     // ===================================================================================\r
@@ -193,11 +213,11 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * @param cb The condition-bean of ${myExtendedObjectClassName}. (NotNull)\r
      * @return The result bean of selected page. (NotNull)\r
      */\r
-    public ${glPagingResultBeanName}<${myExtendedObjectClassName}> selectPage(final ${myConditionBeanClassName} cb) {\r
-        assertConditionBeanNotNull(cb);\r
-        final ${glPagingInvokerName}<${myExtendedObjectClassName}> invoker = new ${glPagingInvokerName}<${myExtendedObjectClassName}>(getTableDbName());\r
-        final ${glPagingHandlerName}<${myExtendedObjectClassName}> handler = new ${glPagingHandlerName}<${myExtendedObjectClassName}>() {\r
-            public ${glPagingBeanInterfaceName} getPagingBean() { return cb; }\r
+    public PagingResultBean<${myExtendedObjectClassName}> selectPage(final ${myConditionBeanClassName} cb) {\r
+        assertCBNotNull(cb);\r
+        final PagingInvoker<${myExtendedObjectClassName}> invoker = new PagingInvoker<${myExtendedObjectClassName}>(getTableDbName());\r
+        final PagingHandler<${myExtendedObjectClassName}> handler = new PagingHandler<${myExtendedObjectClassName}>() {\r
+            public PagingBean getPagingBean() { return cb; }\r
             public int count() { return selectCount(cb); }\r
             public List<${myExtendedObjectClassName}> paging() { return selectList(cb); }\r
         };\r
@@ -205,19 +225,29 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     }\r
 \r
     // ===================================================================================\r
-    //                                                                      Various Select\r
-    //                                                                      ==============\r
+    //                                                                       Scalar Select\r
+    //                                                                       =============\r
     /**\r
-     * Select the list of value-label.\r
-     * @param cb The condition-bean of ${myExtendedObjectClassName}. (NotNull)\r
-     * @param valueLabelSetupper The setupper of value-label. (NotNull)\r
-     * @return The list of value-label. (NotNull)\r
+     * Select the scalar value derived by a function. <br />\r
+     * Call a function method after this method called like as follows:\r
+     * <pre>\r
+     * ${table.uncapitalisedJavaName}Bhv.scalarSelect(Date.class).max(new ScalarQuery(${myConditionBeanClassName} cb) {\r
+     *     cb.specify().columnXxxDatetime(); // the required specification of target column\r
+     *     cb.query().setXxxName_PrefixSearch("S"); // query as you like it\r
+     * });\r
+     * </pre>\r
+     * @param <RESULT> The type of result.\r
+     * @param resultType The type of result. (NotNull)\r
+     * @return The scalar value derived by a function. (Nullable)\r
      */\r
-    public List<java.util.Map<String, Object>> selectValueLabelList(${myConditionBeanClassName} cb, ${glValueLabelSetupperName}<${myExtendedObjectClassName}> valueLabelSetupper) {\r
-        return createValueLabelList(selectList(cb), valueLabelSetupper);\r
+    public <RESULT> SLFunction<${myConditionBeanClassName}, RESULT> scalarSelect(Class<RESULT> resultType) {\r
+        ${myConditionBeanClassName} cb = newMyConditionBean();\r
+        cb.xsetupForScalarSelect();\r
+        cb.getSqlClause().disableSelectIndex(); // for when you use union\r
+        return new SLFunction<${myConditionBeanClassName}, RESULT>(cb, resultType);\r
     }\r
-\r
 #if ($table.isUseSequence())\r
+\r
     // ===================================================================================\r
     //                                                                            Sequence\r
     //                                                                            ========\r
@@ -229,8 +259,8 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
         return delegateSelectNextVal();\r
     }\r
 #end\r
-\r
 #if (${table.hasOnlyOnePrimaryKey()})\r
+\r
     // ===================================================================================\r
     //                                                                       Load Referrer\r
     //                                                                       =============\r
@@ -244,16 +274,15 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
 #set ($genericPKMyEntityMap = "${table.getPrimaryKeyJavaNativeAsOne()}, ${myExtendedObjectClassName}")\r
 #set ($genericPKChildListMap = "${table.getPrimaryKeyJavaNativeAsOne()}, List<${referrerEntityClassName}>")\r
 #if (!${referrer.isOneToOne()})\r
-#if ($database.isMakeBehaviorNoConditionLoadReferrer())\r
     /**\r
-     * {Refer to overload method that has an argument of condition-bean setupper.}\r
-     * @param ${myEntityListVariableName} The entity list of ${table.javaBeansRulePropertyName}. (NotNull)\r
+     * {Refer to overload method that has an argument of the list of entity.}\r
+     * @param ${myEntityVariableName} The entity of ${table.javaBeansRulePropertyName}. (NotNull)\r
+     * @param conditionBeanSetupper The instance of referrer condition-bean setupper for registering referrer condition. (NotNull)\r
      */\r
-    public void load${referrer.referrerJavaBeansRulePropertyNameInitCap}(List<${myExtendedObjectClassName}> ${myEntityListVariableName}) {\r
-        load${referrer.referrerJavaBeansRulePropertyNameInitCap}(${myEntityListVariableName}, new ${glConditionBeanSetupperName}<${referrerCBClassName}>() {\r
-            public void setup(${referrerCBClassName} cb) {}});\r
+    public void load${referrer.referrerJavaBeansRulePropertyNameInitCap}(${myExtendedObjectClassName} ${myEntityVariableName}, ConditionBeanSetupper<${referrerCBClassName}> conditionBeanSetupper) {\r
+        xassLRArg(${myEntityVariableName}, conditionBeanSetupper);\r
+        load${referrer.referrerJavaBeansRulePropertyNameInitCap}(xnewLRLs(${myEntityVariableName}), conditionBeanSetupper);\r
     }\r
-#end\r
     /**\r
      * Load referrer of ${referrer.referrerJavaBeansRulePropertyName} with the setupper for condition-bean of referrer. <br />\r
      * About internal policy, the value of primary key(and others too) is treated as case-insensitive. <br />\r
@@ -265,20 +294,26 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * @param ${myEntityListVariableName} The entity list of ${table.javaBeansRulePropertyName}. (NotNull)\r
      * @param conditionBeanSetupper The instance of referrer condition-bean setupper for registering referrer condition. (NotNull)\r
      */\r
-    public void load${referrer.referrerJavaBeansRulePropertyNameInitCap}(List<${myExtendedObjectClassName}> ${myEntityListVariableName}, ${glConditionBeanSetupperName}<${referrerCBClassName}> conditionBeanSetupper) {\r
-        assertObjectNotNull("${myEntityListVariableName}<${myExtendedObjectClassName}>", ${myEntityListVariableName});\r
-        assertObjectNotNull("conditionBeanSetupper<${referrerCBClassName}>", conditionBeanSetupper);\r
-        if (${myEntityListVariableName}.isEmpty()) { return; }\r
-        load${referrer.referrerJavaBeansRulePropertyNameInitCap}(${myEntityListVariableName}, new ${glLoadReferrerOptionName}<${referrerCBClassName}, ${referrerEntityClassName}>(conditionBeanSetupper));\r
+    public void load${referrer.referrerJavaBeansRulePropertyNameInitCap}(List<${myExtendedObjectClassName}> ${myEntityListVariableName}, ConditionBeanSetupper<${referrerCBClassName}> conditionBeanSetupper) {\r
+        xassLRArg(${myEntityListVariableName}, conditionBeanSetupper);\r
+        load${referrer.referrerJavaBeansRulePropertyNameInitCap}(${myEntityListVariableName}, new LoadReferrerOption<${referrerCBClassName}, ${referrerEntityClassName}>(conditionBeanSetupper));\r
+    }\r
+    /**\r
+     * {Refer to overload method that has an argument of the list of entity.}\r
+     * @param ${myEntityVariableName} The entity of ${table.javaBeansRulePropertyName}. (NotNull)\r
+     * @param loadReferrerOption The option of load-referrer. (NotNull)\r
+     */\r
+    public void load${referrer.referrerJavaBeansRulePropertyNameInitCap}(${myExtendedObjectClassName} ${myEntityVariableName}, LoadReferrerOption<${referrerCBClassName}, ${referrerEntityClassName}> loadReferrerOption) {\r
+        xassLRArg(${myEntityVariableName}, loadReferrerOption);\r
+        load${referrer.referrerJavaBeansRulePropertyNameInitCap}(xnewLRLs(${myEntityVariableName}), loadReferrerOption);\r
     }\r
     /**\r
      * {Refer to overload method that has an argument of condition-bean setupper.}\r
      * @param ${myEntityListVariableName} The entity list of ${table.javaBeansRulePropertyName}. (NotNull)\r
      * @param loadReferrerOption The option of load-referrer. (NotNull)\r
      */\r
-    public void load${referrer.referrerJavaBeansRulePropertyNameInitCap}(List<${myExtendedObjectClassName}> ${myEntityListVariableName}, ${glLoadReferrerOptionName}<${referrerCBClassName}, ${referrerEntityClassName}> loadReferrerOption) {\r
-        assertObjectNotNull("${myEntityListVariableName}<${myExtendedObjectClassName}>", ${myEntityListVariableName});\r
-        assertObjectNotNull("loadReferrerOption<${referrerEntityClassName}, ${referrerCBClassName}>", loadReferrerOption);\r
+    public void load${referrer.referrerJavaBeansRulePropertyNameInitCap}(List<${myExtendedObjectClassName}> ${myEntityListVariableName}, LoadReferrerOption<${referrerCBClassName}, ${referrerEntityClassName}> loadReferrerOption) {\r
+        xassLRArg(${myEntityListVariableName}, loadReferrerOption);\r
         if (${myEntityListVariableName}.isEmpty()) { return; }\r
         final ${referrerBhvClassName} referrerBhv = xgetBSFLR().select(${referrerBhvClassName}.class);\r
         helpLoadReferrerInternally(${myEntityListVariableName}, loadReferrerOption, new InternalLoadReferrerCallback<${myExtendedObjectClassName}, ${table.getPrimaryKeyJavaNativeAsOne()}, ${referrerCBClassName}, ${referrerEntityClassName}>() {\r
@@ -292,13 +327,13 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
             public void callbackReferrer_setForeignEntity(${referrerEntityClassName} referrerEntity, ${myExtendedObjectClassName} baseEntity) { referrerEntity.set${referrer.foreignPropertyNameInitCap}(baseEntity); }\r
         } );\r
     }\r
+\r
 #end\r
 #end\r
 #end\r
-\r
     // ===================================================================================\r
-    //                                                                     Pullout Foreign\r
-    //                                                                     ===============\r
+    //                                                                    Pull out Foreign\r
+    //                                                                    ================\r
 #foreach ($foreignKeys in $table.foreignKeys)\r
 #set ($foreignEntityClassName = "${foreignKeys.foreignTableExtendedEntityClassName}")\r
     /**\r
@@ -312,9 +347,9 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     }\r
 #end\r
 #foreach ($referrer in $table.referrers)\r
-  #set ($referrerTable = $referrer.table)\r
-  #set ($referrerEntityClassName = "${glProjectPrefix}${referrerTable.javaName}")\r
-  #if (${referrer.isOneToOne()})\r
+#set ($referrerTable = $referrer.table)\r
+#set ($referrerEntityClassName = "${glProjectPrefix}${referrerTable.javaName}")\r
+#if (${referrer.isOneToOne()})\r
     /**\r
      * Pull out the list of referrer-as-one table '${referrerEntityClassName}'.\r
      * @param ${myEntityListVariableName} The list of ${table.uncapitalisedJavaName}. (NotNull)\r
@@ -324,7 +359,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
         return helpPulloutInternally(${myEntityListVariableName}, new InternalPulloutCallback<${myExtendedObjectClassName}, ${referrerEntityClassName}>() {\r
             public ${referrerEntityClassName} callbackGetForeignEntity(${myExtendedObjectClassName} entity) { return entity.get${referrer.referrerPropertyNameInitCapAsOne}(); } });\r
     }\r
-  #end\r
+#end\r
 #end\r
 #if ($table.isWritable())\r
 \r
@@ -334,7 +369,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     /**\r
      * Insert the entity.\r
      * @param ${myEntityVariableName} The entity of insert target. (NotNull)\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyExistsException} When the entity already exists. (Unique Constraint Violation)\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyExistsException When the entity already exists. (Unique Constraint Violation)\r
      */\r
     public void insert(${myExtendedObjectClassName} ${myEntityVariableName}) {\r
         assertEntityNotNull(${myEntityVariableName});\r
@@ -342,7 +377,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     }\r
 \r
     @Override\r
-    protected void doCreate(${glEntityInterfaceName} ${myEntityVariableName}) {\r
+    protected void doCreate(Entity ${myEntityVariableName}) {\r
         insert((${myExtendedObjectClassName})${myEntityVariableName});\r
     }\r
 \r
@@ -350,12 +385,12 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * Update the entity modified-only. {UpdateCountZeroException, ConcurrencyControl}\r
      * @param ${myEntityVariableName} The entity of update target. (NotNull) {PrimaryKeyRequired, ConcurrencyColumnRequired}\r
 #if ($table.hasOptimisticLock())\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyUpdatedException} When the entity has already been updated.\r
+     * @exception org.seasar.dbflute.exception.${glEntityAlreadyUpdatedException} When the entity has already been updated.\r
 #else\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException} When the entity has already been deleted.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException When the entity has already been deleted.\r
 #end\r
-     * @exception ${glPackageBaseCommonException}.${glEntityDuplicatedException} When the entity has been duplicated.\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyExistsException} When the entity already exists. (Unique Constraint Violation)\r
+     * @exception org.seasar.dbflute.exception.EntityDuplicatedException When the entity has been duplicated.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyExistsException When the entity already exists. (Unique Constraint Violation)\r
      */\r
     public void update(final ${myExtendedObjectClassName} ${myEntityVariableName}) {\r
         helpUpdateInternally(${myEntityVariableName}, new InternalUpdateCallback<${myExtendedObjectClassName}>() {\r
@@ -363,7 +398,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     }\r
 \r
     @Override\r
-    protected void doModify(${glEntityInterfaceName} entity) {\r
+    protected void doModify(Entity entity) {\r
         update((${myExtendedObjectClassName})entity);\r
     }\r
 #if ($table.hasOptimisticLock())\r
@@ -371,9 +406,9 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     /**\r
      * Update the entity non-strictly modified-only. {UpdateCountZeroException, NonConcurrencyControl}\r
      * @param ${myEntityVariableName} The entity of update target. (NotNull) {PrimaryKeyRequired}\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException} When the entity has already been deleted.\r
-     * @exception ${glPackageBaseCommonException}.${glEntityDuplicatedException} When the entity has been duplicated.\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyExistsException} When the entity already exists. (Unique Constraint Violation)\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException When the entity has already been deleted.\r
+     * @exception org.seasar.dbflute.exception.EntityDuplicatedException When the entity has been duplicated.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyExistsException When the entity already exists. (Unique Constraint Violation)\r
      */\r
     public void updateNonstrict(final ${myExtendedObjectClassName} ${myEntityVariableName}) {\r
         helpUpdateNonstrictInternally(${myEntityVariableName}, new InternalUpdateNonstrictCallback<${myExtendedObjectClassName}>() {\r
@@ -382,8 +417,8 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
 #end\r
 \r
     @Override\r
-    protected void doModifyNonstrict(${glEntityInterfaceName} entity) {\r
-#if ($database.isVersionAfter1040() && ($table.isUseUpdateDate() || $table.isUseVersionNo()))\r
+    protected void doModifyNonstrict(Entity entity) {\r
+#if ($table.hasOptimisticLock())\r
         updateNonstrict((${myExtendedObjectClassName})entity);\r
 #else\r
         update((${myExtendedObjectClassName})entity);\r
@@ -394,12 +429,12 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * Insert or update the entity modified-only. {ConcurrencyControl(when update)}\r
      * @param ${myEntityVariableName} The entity of insert or update target. (NotNull)\r
 #if ($table.hasOptimisticLock())\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyUpdatedException} When the entity has already been updated.\r
+     * @exception org.seasar.dbflute.exception.${glEntityAlreadyUpdatedException} When the entity has already been updated.\r
 #else\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException} When the entity has already been deleted.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException When the entity has already been deleted.\r
 #end\r
-     * @exception ${glPackageBaseCommonException}.${glEntityDuplicatedException} When the entity has been duplicated.\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyExistsException} When the entity already exists. (Unique Constraint Violation)\r
+     * @exception org.seasar.dbflute.exception.EntityDuplicatedException When the entity has been duplicated.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyExistsException When the entity already exists. (Unique Constraint Violation)\r
      */\r
     public void insertOrUpdate(final ${myExtendedObjectClassName} ${myEntityVariableName}) {\r
         helpInsertOrUpdateInternally(${myEntityVariableName}, new InternalInsertOrUpdateCallback<${myExtendedObjectClassName}, ${myConditionBeanClassName}>() {\r
@@ -411,7 +446,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     }\r
 \r
     @Override\r
-    protected void doCreateOrUpdate(${glEntityInterfaceName} ${myEntityVariableName}) {\r
+    protected void doCreateOrUpdate(Entity ${myEntityVariableName}) {\r
         insertOrUpdate((${myExtendedObjectClassName})${myEntityVariableName});\r
     }\r
 #if ($table.hasOptimisticLock())\r
@@ -419,9 +454,9 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     /**\r
      * Insert or update the entity non-strictly modified-only. {NonConcurrencyControl(when update)}\r
      * @param ${myEntityVariableName} The entity of insert or update target. (NotNull)\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException} When the entity has already been deleted.\r
-     * @exception ${glPackageBaseCommonException}.${glEntityDuplicatedException} When the entity has been duplicated.\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyExistsException} When the entity already exists. (Unique Constraint Violation)\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException When the entity has already been deleted.\r
+     * @exception org.seasar.dbflute.exception.EntityDuplicatedException When the entity has been duplicated.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyExistsException When the entity already exists. (Unique Constraint Violation)\r
      */\r
     public void insertOrUpdateNonstrict(${myExtendedObjectClassName} ${myEntityVariableName}) {\r
         helpInsertOrUpdateInternally(${myEntityVariableName}, new InternalInsertOrUpdateNonstrictCallback<${myExtendedObjectClassName}>() {\r
@@ -432,7 +467,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
 #end\r
 \r
     @Override\r
-    protected void doCreateOrUpdateNonstrict(${glEntityInterfaceName} entity) {\r
+    protected void doCreateOrUpdateNonstrict(Entity entity) {\r
 #if ($table.isUseUpdateDate() || $table.isUseVersionNo())\r
         insertOrUpdateNonstrict((${myExtendedObjectClassName})entity);\r
 #else\r
@@ -444,11 +479,11 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * Delete the entity. {UpdateCountZeroException, ConcurrencyControl}\r
      * @param ${myEntityVariableName} The entity of delete target. (NotNull) {PrimaryKeyRequired, ConcurrencyColumnRequired}\r
 #if ($table.hasOptimisticLock())\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyUpdatedException} When the entity has already been updated.\r
+     * @exception org.seasar.dbflute.exception.${glEntityAlreadyUpdatedException} When the entity has already been updated.\r
 #else\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException} When the entity has already been deleted.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException When the entity has already been deleted.\r
 #end\r
-     * @exception ${glPackageBaseCommonException}.${glEntityDuplicatedException} When the entity has been duplicated.\r
+     * @exception org.seasar.dbflute.exception.EntityDuplicatedException When the entity has been duplicated.\r
      */\r
     public void delete(${myExtendedObjectClassName} ${myEntityVariableName}) {\r
         helpDeleteInternally(${myEntityVariableName}, new InternalDeleteCallback<${myExtendedObjectClassName}>() {\r
@@ -456,7 +491,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     }\r
 \r
     @Override\r
-    protected void doRemove(${glEntityInterfaceName} ${myEntityVariableName}) {\r
+    protected void doRemove(Entity ${myEntityVariableName}) {\r
         delete((${myExtendedObjectClassName})${myEntityVariableName});\r
     }\r
 #if ($table.hasOptimisticLock())\r
@@ -464,8 +499,8 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     /**\r
      * Delete the entity non-strictly. {UpdateCountZeroException, NonConcurrencyControl}\r
      * @param ${myEntityVariableName} Entity. (NotNull) {PrimaryKeyRequired}\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException} When the entity has already been deleted.\r
-     * @exception ${glPackageBaseCommonException}.${glEntityDuplicatedException} When the entity has been duplicated.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException When the entity has already been deleted.\r
+     * @exception org.seasar.dbflute.exception.EntityDuplicatedException When the entity has been duplicated.\r
      */\r
     public void deleteNonstrict(${myExtendedObjectClassName} ${myEntityVariableName}) {\r
         helpDeleteNonstrictInternally(${myEntityVariableName}, new InternalDeleteNonstrictCallback<${myExtendedObjectClassName}>() {\r
@@ -475,7 +510,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     /**\r
      * Delete the entity non-strictly ignoring deleted. {UpdateCountZeroException, NonConcurrencyControl}\r
      * @param ${myEntityVariableName} Entity. (NotNull) {PrimaryKeyRequired}\r
-     * @exception ${glPackageBaseCommonException}.${glEntityDuplicatedException} When the entity has been duplicated.\r
+     * @exception org.seasar.dbflute.exception.EntityDuplicatedException When the entity has been duplicated.\r
      */\r
     public void deleteNonstrictIgnoreDeleted(${myExtendedObjectClassName} ${myEntityVariableName}) {\r
         helpDeleteNonstrictIgnoreDeletedInternally(${myEntityVariableName}, new InternalDeleteNonstrictIgnoreDeletedCallback<${myExtendedObjectClassName}>() {\r
@@ -502,9 +537,9 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * @param ${myEntityListVariableName} The list of the entity. (NotNull)\r
      * @return The array of updated count.\r
 #if ($table.hasOptimisticLock())\r
-     * @exception ${glPackageBaseCommonException}.${glBatchEntityAlreadyUpdatedException} When the entity has already been updated. This exception extends ${glEntityAlreadyUpdateException}.\r
+     * @exception org.seasar.dbflute.exception.BatchEntityAlreadyUpdatedException When the entity has already been updated. This exception extends ${glEntityAlreadyUpdateException}.\r
 #else\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException} When the entity has already been deleted.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException When the entity has already been deleted.\r
 #end\r
      */\r
     public int[] batchUpdate(List<${myExtendedObjectClassName}> ${myEntityListVariableName}) {\r
@@ -518,7 +553,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * This method use 'Batch Update' of java.sql.PreparedStatement.\r
      * @param ${myEntityListVariableName} The list of the entity. (NotNull)\r
      * @return The array of updated count.\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException} When the entity has already been deleted.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException When the entity has already been deleted.\r
      */\r
     public int[] batchUpdateNonstrict(List<${myExtendedObjectClassName}> ${myEntityListVariableName}) {\r
         assertObjectNotNull("${myEntityListVariableName}", ${myEntityListVariableName});\r
@@ -532,9 +567,9 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * @param ${myEntityListVariableName} The list of the entity. (NotNull)\r
      * @return The array of deleted count.\r
 #if ($table.hasOptimisticLock())\r
-     * @exception ${glPackageBaseCommonException}.${glBatchEntityAlreadyUpdatedException} When the entity has already been updated. This exception extends ${glEntityAlreadyUpdateException}.\r
+     * @exception org.seasar.dbflute.exception.BatchEntityAlreadyUpdatedException When the entity has already been updated. This exception extends ${glEntityAlreadyUpdateException}.\r
 #else\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException} When the entity has already been deleted.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException When the entity has already been deleted.\r
 #end\r
      */\r
     public int[] batchDelete(List<${myExtendedObjectClassName}> ${myEntityListVariableName}) {\r
@@ -548,7 +583,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * This method use 'Batch Update' of java.sql.PreparedStatement.\r
      * @param ${myEntityListVariableName} The list of the entity. (NotNull)\r
      * @return The array of deleted count.\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException} When the entity has already been deleted.\r
+     * @exception org.seasar.dbflute.exception.EntityAlreadyDeletedException When the entity has already been deleted.\r
      */\r
     public int[] batchDeleteNonstrict(List<${myExtendedObjectClassName}> ${myEntityListVariableName}) {\r
         assertObjectNotNull("${myEntityListVariableName}", ${myEntityListVariableName});\r
@@ -567,10 +602,10 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * @return The updated count.\r
      */\r
     public int queryUpdate(${myExtendedObjectClassName} ${myEntityVariableName}, ${myConditionBeanClassName} cb) {\r
-        assertObjectNotNull("${myEntityVariableName}", ${myEntityVariableName}); assertConditionBeanNotNull(cb);\r
+        assertObjectNotNull("${myEntityVariableName}", ${myEntityVariableName}); assertCBNotNull(cb);\r
         setupCommonColumnOfUpdateIfNeeds(${myEntityVariableName});\r
         filterEntityOfUpdate(${myEntityVariableName}); assertEntityOfUpdate(${myEntityVariableName});\r
-        return getMyDao().updateByQuery(cb, ${myEntityVariableName});\r
+        return invoke(createQueryUpdateEntityCBCommand(${myEntityVariableName}, cb));\r
     }\r
 \r
     /**\r
@@ -579,134 +614,175 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * @return The deleted count.\r
      */\r
     public int queryDelete(${myConditionBeanClassName} cb) {\r
-        assertConditionBeanNotNull(cb);\r
-        return getMyDao().deleteByQuery(cb);\r
+        assertCBNotNull(cb);\r
+        return invoke(createQueryDeleteCBCommand(cb));\r
     }\r
 #end\r
+#else\r
+#if ($table.isAvailableNonPrimaryKeyWritable())\r
 \r
     // ===================================================================================\r
-    //                                                                      Various Update\r
-    //                                                                      ==============\r
-#if ($database.isMakeBehaviorCopyInsert())\r
-#if ($table.isUseIdentity())\r
-#if ($table.hasPrimaryKey())\r
-\r
-    /* (non-javadoc) \r
-     * Copy-insert.\r
-     * @param primaryKey Primary-keys. (NotNull)\r
-     * @return Inserted count.\r
-     * @exception ${glPackageBaseCommonException}.${glEntityAlreadyDeletedException}\r
+    //                                                                       Entity Update\r
+    //                                                                       =============\r
+    /**\r
+     * Insert.\r
+     * @param ${myEntityVariableName} Entity. (NotNull)\r
      */\r
-    public int copyInsertByPKValueAfterSelect(${table.PrimaryKeyArgsString}) {\r
+    public void insert(${myExtendedObjectClassName} ${myEntityVariableName}) {\r
+        assertEntityNotNull(${myEntityVariableName});\r
+        delegateInsert(${myEntityVariableName});\r
+    }\r
+#end\r
+#end\r
+#if ($table.isBuriTarget())\r
+\r
+    // ===================================================================================\r
+    //                                                                      Buri Interface\r
+    //                                                                      ==============\r
+    public ${myExtendedObjectClassName} xgetEntityForBuri(${table.primaryKeyArgsString}) { // For Buri\r
         ${myExtendedObjectClassName} entity = new ${myExtendedObjectClassName}();\r
         ${table.getPrimaryKeyArgsSetupString('entity')}\r
-        final ${myConditionBeanClassName} cb = newMyConditionBean();\r
+        ${myConditionBeanClassName} cb = newMyConditionBean();\r
         cb.acceptPrimaryKeyMapString(getDBMeta().extractPrimaryKeyMapString(entity));\r
-        final ${myExtendedObjectClassName} currentEntity = selectEntityWithDeletedCheck(cb);\r
-        return delegateInsert(currentEntity);\r
+        return selectEntity(cb);\r
     }\r
-#end\r
 \r
-    /**\r
-     * Filter 'copy-insert' entity.\r
-     * @param ${myEntityVariableName} Entity. (NotNull)\r
-     */\r
-    protected void filterCopyInsertEntity(${myExtendedObjectClassName} ${myEntityVariableName}) {\r
+    public List<${myExtendedObjectClassName}> xgetEntitiesForBuri(List<${table.primaryKeyJavaNativeAsOne}> ids) { // For Buri\r
+        ${myConditionBeanClassName} cb = newMyConditionBean();\r
+        cb.query().set${table.primaryKeyAsOne.javaName}_InScope(ids);\r
+        return selectList(cb);\r
     }\r
-#end\r
-#end\r
-#if ($database.isMakeBehaviorLoopUpdate())\r
-    /**\r
-     * Loop update modified elements only.\r
-     * @param ${myEntityListVariableName} The list of entity. (NotNull and Empty OK)\r
-     */\r
-    public void loopUpdateModifiedElementsOnly(List<${myExtendedObjectClassName}> ${myEntityListVariableName}) {\r
-        assertObjectNotNull("${myEntityListVariableName}", ${myEntityListVariableName});\r
-        for (${myExtendedObjectClassName} entity : ${myEntityListVariableName}) { if (entity.hasModification()) { update(entity); } }\r
+\r
+    protected org.escafe.buri.engine.processor.SimpleBuriProcessor _simpleBuriProcessor;\r
+    public void setSimpleBuriProcessor(org.escafe.buri.engine.processor.SimpleBuriProcessor simpleBuriProcessor) {\r
+        _simpleBuriProcessor = simpleBuriProcessor;\r
     }\r
+#foreach ($processName in $table.tableProcessForMethodNameList)\r
 \r
-#if ($table.isUseUpdateDate() || $table.isUseVersionNo())\r
-    /**\r
-     * Loop update modified elements only non-strictly.\r
-     * @param ${myEntityListVariableName} The list of entity. (NotNull and Empty OK)\r
-     */\r
-    public void loopUpdateModifiedElementsOnlyNonstrict(List<${myExtendedObjectClassName}> ${myEntityListVariableName}) {\r
-        assertObjectNotNull("${myEntityListVariableName}", ${myEntityListVariableName});\r
-        for (${myExtendedObjectClassName} entity : ${myEntityListVariableName}) { if (entity.hasModification()) { updateNonstrict(entity); } }\r
+    public void toNextStatus_${processName}(${myExtendedObjectClassName} ${myEntityVariableName}, ${glBuriDef}.${processName}_Action action) {\r
+        _simpleBuriProcessor.toNextStatusAction(${glBuriDef}.${processName}_Status.basePath(), ${myEntityVariableName}, action.code());\r
     }\r
-#end\r
-#end\r
-#else\r
-  #if ($table.isAvailableNonPrimaryKeyWritable())\r
 \r
-    // ===================================================================================\r
-    //                                                                       Entity Update\r
-    //                                                                       =============\r
-    /**\r
-     * Insert.\r
-     * @param ${myEntityVariableName} Entity. (NotNull)\r
-     */\r
-    public void insert(${myExtendedObjectClassName} ${myEntityVariableName}) {\r
-        assertEntityNotNull(${myEntityVariableName});\r
-        delegateInsert(${myEntityVariableName});\r
+    public ${glBuriDef}.${processName}_Status getStatus_${processName}(${myExtendedObjectClassName} ${myEntityVariableName}) {\r
+        java.util.List<BuriPathData> buriPathDataList = xgetCurrentPathDataList(${myEntityVariableName});\r
+        java.util.List<${glBuriDef}.${processName}_Status> statusList = new java.util.ArrayList<${glBuriDef}.${processName}_Status>();\r
+        if (buriPathDataList.isEmpty()) { return null; }\r
+        for (BuriPathData buriPathData : buriPathDataList) {\r
+            ${glBuriDef}.${processName}_Status status = ${glBuriDef}.${processName}_Status.codeOf(buriPathData.getPathName());\r
+            if (status != null) { statusList.add(status); }\r
+        }\r
+        if (statusList.size() > 1) {\r
+            String msg = "This method does not support duplicate status: " + statusList;\r
+            throw new IllegalStateException(msg);\r
+        }\r
+        return !statusList.isEmpty() ? statusList.get(0) : null;\r
+    }\r
+\r
+    public java.util.List<${myExtendedObjectClassName}> getEntities(org.seasar.dbflute.bhv.ConditionBeanSetupper<${myConditionBeanClassName}> conditionBeanSetupper\r
+            , ${glBuriDef}.${processName}_Status... statuses) {\r
+        assertObjectNotNull("statuses", statuses);\r
+        ${myConditionBeanClassName} cb = newMyConditionBean();\r
+        cb.setupSelect_BuriPathData();\r
+        conditionBeanSetupper.setup(cb);\r
+        java.util.List<String> pathNameList = new java.util.ArrayList<String>();\r
+        for (${glBuriDef}.${processName}_Status status : statuses) {\r
+            pathNameList.add(status.fullPath());\r
+        }\r
+        cb.query().queryBuriPathData().setPathName_InScope(pathNameList);\r
+        return selectList(cb);\r
     }\r
-  #end\r
 #end\r
 \r
+    private List<BuriPathData> xgetCurrentPathDataList(${myExtendedObjectClassName} ${myEntityVariableName}) {\r
+        ${glPackageExtendedBhv}.BuriPathDataBhv bhv = xgetBuriPathDataBhv();\r
+        BuriPathDataCB cb = bhv.newMyConditionBean();\r
+        cb.specify().columnPathName();\r
+        cb.query().setPkeyNum_Equal(new Long(${myEntityVariableName}.${table.primaryKeyGetterCommaString}));\r
+        cb.query().setDataType_Equal(${myExtendedObjectClassName}.class.getName());\r
+        return bhv.selectList(cb);\r
+    }\r
+\r
+    private ${glPackageExtendedBhv}.BuriPathDataBhv xgetBuriPathDataBhv() {\r
+        return getBehaviorSelector().select(${glPackageExtendedBhv}.BuriPathDataBhv.class);\r
+    }\r
+#end\r
+    \r
     // ===================================================================================\r
     //                                                                     Delegate Method\r
     //                                                                     ===============\r
+    // [Behavior Command]\r
     // -----------------------------------------------------\r
     //                                                Select\r
     //                                                ------\r
-#if ($database.isMakeDeprecated())\r
-    ${database.behaviorDelegateModifier} int delegateGetCountAll() { return delegateSelectCount(newMyConditionBean()); }\r
-    ${database.behaviorDelegateModifier} List<${myExtendedObjectClassName}> delegateGetListAll() { return delegateSelectList(newMyConditionBean()); }\r
-#end\r
-    ${database.behaviorDelegateModifier} int delegateSelectCount(${myConditionBeanClassName} cb) { assertConditionBeanNotNull(cb); return getMyDao().selectCount(cb); }\r
-    ${database.behaviorDelegateModifier} List<${myExtendedObjectClassName}> delegateSelectList(${myConditionBeanClassName} cb) { assertConditionBeanNotNull(cb); return getMyDao().selectList(cb); }\r
+    protected int delegateSelectCount(${myConditionBeanClassName} cb) { return invoke(createSelectCountCBCommand(cb)); }\r
+    protected void delegateSelectCursor(${myConditionBeanClassName} cb, EntityRowHandler<${myExtendedObjectClassName}> entityRowHandler)\r
+    { invoke(createSelectCursorCBCommand(cb, entityRowHandler, ${myExtendedObjectClassName}.class)); }\r
+    protected int doCallReadCount(ConditionBean cb) { return delegateSelectCount((${myConditionBeanClassName})cb); }\r
+    protected List<${myExtendedObjectClassName}> delegateSelectList(${myConditionBeanClassName} cb)\r
+    { return invoke(createSelectListCBCommand(cb, ${myExtendedObjectClassName}.class)); }\r
+    @SuppressWarnings("unchecked")\r
+    protected List<Entity> doCallReadList(ConditionBean cb) { return (List)delegateSelectList((${myConditionBeanClassName})cb); }\r
 #if ($table.isUseSequence())\r
-    ${database.behaviorDelegateModifier} ${table.sequenceReturnType} delegateSelectNextVal() { return getMyDao().selectNextVal(); }\r
+    protected ${table.sequenceReturnType} delegateSelectNextVal() { return invoke(createSelectNextValCommand(${table.sequenceReturnType}.class)); }\r
 #end\r
 #if ($table.isWritable())\r
 \r
     // -----------------------------------------------------\r
     //                                                Update\r
     //                                                ------\r
-    ${database.behaviorDelegateModifier} int delegateInsert(${myExtendedObjectClassName} e) { if (!processBeforeInsert(e)) { return 1; } return getMyDao().insert(e); }\r
-    ${database.behaviorDelegateModifier} int delegateUpdate(${myExtendedObjectClassName} e) { if (!processBeforeUpdate(e)) { return 1; } return getMyDao().updateModifiedOnly(e); }\r
+    protected int delegateInsert(${myExtendedObjectClassName} e)\r
+    { if (!processBeforeInsert(e)) { return 1; } return invoke(createInsertEntityCommand(e)); }\r
+    protected int doCallCreate(Entity entity) {return delegateInsert(downcast(entity)); }\r
+    protected int delegateUpdate(${myExtendedObjectClassName} e)\r
+    { if (!processBeforeUpdate(e)) { return 1; } return invoke(createUpdateEntityCommand(e)); }\r
+    protected int doCallModify(Entity entity) { return delegateUpdate(downcast(entity)); }\r
 #if ($table.hasOptimisticLock())\r
-    ${database.behaviorDelegateModifier} int delegateUpdateNonstrict(${myExtendedObjectClassName} e) { if (!processBeforeUpdate(e)) { return 1; } return getMyDao().updateNonstrictModifiedOnly(e); }\r
+    protected int delegateUpdateNonstrict(${myExtendedObjectClassName} e)\r
+    { if (!processBeforeUpdate(e)) { return 1; } return invoke(createUpdateNonstrictEntityCommand(e)); }\r
 #end\r
-    ${database.behaviorDelegateModifier} int delegateDelete(${myExtendedObjectClassName} e) { if (!processBeforeDelete(e)) { return 1; } return getMyDao().delete(e); }\r
+    protected int delegateDelete(${myExtendedObjectClassName} e)\r
+    { if (!processBeforeDelete(e)) { return 1; } return invoke(createDeleteEntityCommand(e)); }\r
+    protected int doCallRemove(Entity entity) { return delegateDelete(downcast(entity)); }\r
 #if ($table.hasOptimisticLock())\r
-    ${database.behaviorDelegateModifier} int delegateDeleteNonstrict(${myExtendedObjectClassName} e) { if (!processBeforeDelete(e)) { return 1; } return getMyDao().deleteNonstrict(e); }\r
-#end\r
-\r
-    ${database.behaviorDelegateModifier} int[] delegateInsertList(List<${myExtendedObjectClassName}> ls) {\r
-        assertObjectNotNull("${myEntityListVariableName}", ls); return getMyDao().insertList(helpFilterBeforeInsertInternally(ls));\r
-    }\r
-    ${database.behaviorDelegateModifier} int[] delegateUpdateList(List<${myExtendedObjectClassName}> ls) {\r
-        assertObjectNotNull("${myEntityListVariableName}", ls); return getMyDao().updateList(helpFilterBeforeUpdateInternally(ls));\r
-    }\r
+    protected int delegateDeleteNonstrict(${myExtendedObjectClassName} e)\r
+    { if (!processBeforeDelete(e)) { return 1; } return invoke(createDeleteNonstrictEntityCommand(e)); }\r
+#end\r
+\r
+    protected int[] delegateInsertList(List<${myExtendedObjectClassName}> ls)\r
+    { if (ls.isEmpty()) { return new int[]{}; } return invoke(createBatchInsertEntityCommand(helpFilterBeforeInsertInternally(ls))); }\r
+    @SuppressWarnings("unchecked")\r
+    protected int[] doCreateList(List<Entity> ls) { return delegateInsertList((List)ls); }\r
+    protected int[] delegateUpdateList(List<${myExtendedObjectClassName}> ls)\r
+    { if (ls.isEmpty()) { return new int[]{}; } return invoke(createBatchUpdateEntityCommand(helpFilterBeforeUpdateInternally(ls))); }\r
+    @SuppressWarnings("unchecked")\r
+    protected int[] doModifyList(List<Entity> ls) { return delegateUpdateList((List)ls); }\r
 #if ($table.hasOptimisticLock())\r
-    ${database.behaviorDelegateModifier} int[] delegateUpdateListNonstrict(List<${myExtendedObjectClassName}> ls) {\r
-        assertObjectNotNull("${myEntityListVariableName}", ls); return getMyDao().updateListNonstrict(helpFilterBeforeUpdateInternally(ls));\r
-    }\r
+    protected int[] delegateUpdateListNonstrict(List<${myExtendedObjectClassName}> ls)\r
+    { if (ls.isEmpty()) { return new int[]{}; } return invoke(createBatchUpdateNonstrictEntityCommand(helpFilterBeforeUpdateInternally(ls))); }\r
 #end\r
-    ${database.behaviorDelegateModifier} int[] delegateDeleteList(List<${myExtendedObjectClassName}> ls) {\r
-        assertObjectNotNull("${myEntityListVariableName}", ls); return getMyDao().deleteList(helpFilterBeforeDeleteInternally(ls));\r
-    }\r
+    protected int[] delegateDeleteList(List<${myExtendedObjectClassName}> ls)\r
+    { if (ls.isEmpty()) { return new int[]{}; } return invoke(createBatchDeleteEntityCommand(helpFilterBeforeDeleteInternally(ls))); }\r
+    @SuppressWarnings("unchecked")\r
+    protected int[] doRemoveList(List<Entity> ls) { return delegateDeleteList((List)ls); }\r
 #if ($table.hasOptimisticLock())\r
-    ${database.behaviorDelegateModifier} int[] delegateDeleteListNonstrict(List<${myExtendedObjectClassName}> ls) {\r
-        assertObjectNotNull("${myEntityListVariableName}", ls); return getMyDao().deleteListNonstrict(helpFilterBeforeDeleteInternally(ls));\r
-    }\r
+    protected int[] delegateDeleteListNonstrict(List<${myExtendedObjectClassName}> ls)\r
+    { if (ls.isEmpty()) { return new int[]{}; } return invoke(createBatchDeleteNonstrictEntityCommand(helpFilterBeforeDeleteInternally(ls))); }\r
 #end\r
 #else\r
 #if ($table.isAvailableNonPrimaryKeyWritable())\r
-    ${database.behaviorDelegateModifier} int delegateInsert(${myExtendedObjectClassName} entity) {\r
-        assertEntityNotNull(entity);// If this table use identity, the entity does not have primary-key.\r
-        return getMyDao().insert(entity);\r
+    protected int delegateInsert(${myExtendedObjectClassName} e) {\r
+        assertEntityNotNull(e); // If this table use identity, the entity does not have primary-key.\r
+        filterEntityOfInsert(e);\r
+        return invoke(createInsertEntityCommand(e));\r
+    }\r
+    protected InsertEntityCommand createInsertEntityCommand(Entity entity) {\r
+        assertBehaviorCommandInvoker("createInsertEntityCommand");\r
+        final InsertEntityCommand cmd = new InsertEntityCommand();\r
+        cmd.setTableDbName(getTableDbName());\r
+        _behaviorCommandInvoker.injectComponentProperty(cmd);\r
+        cmd.setEntityType(entity.getClass());\r
+        cmd.setEntity(entity);\r
+        return cmd;\r
     }\r
 #end\r
 #end\r
@@ -717,7 +793,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     //                                                                     ===============\r
 #if ($table.hasBehaviorFilterBeforeInsertColumn())\r
     @Override\r
-    protected void filterEntityOfInsert(${glEntityInterfaceName} targetEntity) {\r
+    protected void filterEntityOfInsert(Entity targetEntity) {\r
         super.filterEntityOfInsert(targetEntity);\r
         ${myExtendedObjectClassName} entity = downcast(targetEntity);\r
 #foreach ($column in $table.behaviorFilterBeforeInsertColumnList)\r
@@ -725,9 +801,10 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
 #end\r
     }\r
 #end\r
+#if ($table.isWritable())\r
 #if ($table.hasBehaviorFilterBeforeUpdateColumn())\r
     @Override\r
-    protected void filterEntityOfUpdate(${glEntityInterfaceName} targetEntity) {\r
+    protected void filterEntityOfUpdate(Entity targetEntity) {\r
         super.filterEntityOfUpdate(targetEntity);\r
         ${myExtendedObjectClassName} entity = downcast(targetEntity);\r
 #foreach ($column in $table.behaviorFilterBeforeUpdateColumnList)\r
@@ -736,6 +813,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     }\r
 #end\r
 #end\r
+#end\r
 #if ($database.isMakeFlatExpansion())\r
 \r
     // ===================================================================================\r
@@ -747,8 +825,8 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * @param <SOURCE> The type of source.\r
      * @return Hierarchy request of ${myExtendedObjectClassName}. (NotNull)\r
      */\r
-    public <SOURCE> ${glHierarchyBasicRequestName}<${myExtendedObjectClassName}, ${myDBMetaClassName}.${table.relationTraceClassName}RelationTrace> createHierarchyBasicRequest(List<SOURCE> sourceList) {\r
-        final ${glHierarchyBasicRequestName}<${myExtendedObjectClassName}, ${myDBMetaClassName}.${table.relationTraceClassName}RelationTrace> request = new ${glHierarchyBasicRequestName}<${myExtendedObjectClassName}, ${myDBMetaClassName}.${table.relationTraceClassName}RelationTrace>(${myExtendedObjectClassName}.class);\r
+    public <SOURCE> ${glHierarchyBasicRequest}<${myExtendedObjectClassName}, ${myDBMetaClassName}.${table.relationTraceClassName}RelationTrace> createHierarchyBasicRequest(List<SOURCE> sourceList) {\r
+        final ${glHierarchyBasicRequest}<${myExtendedObjectClassName}, ${myDBMetaClassName}.${table.relationTraceClassName}RelationTrace> request = new ${glHierarchyBasicRequest}<${myExtendedObjectClassName}, ${myDBMetaClassName}.${table.relationTraceClassName}RelationTrace>(${myExtendedObjectClassName}.class);\r
         request.registerSourceList(sourceList);\r
         return request;\r
     }\r
@@ -758,8 +836,8 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
      * @param request Hierarchy request of ${myExtendedObjectClassName}. (NotNull)\r
      * @return The list of ${myExtendedObjectClassName}. (NotNull)\r
      */\r
-    public List<${myExtendedObjectClassName}> arrangeHierarchy(${glHierarchyRequestName}<${myExtendedObjectClassName}> request) {\r
-        return new ${glHierarchyArrangerName}<${myExtendedObjectClassName}>().arrangeHierarchy(request);\r
+    public List<${myExtendedObjectClassName}> arrangeHierarchy(${glHierarchyRequest}<${myExtendedObjectClassName}> request) {\r
+        return new ${glHierarchyArranger}<${myExtendedObjectClassName}>().arrangeHierarchy(request);\r
     }\r
 #end\r
 \r
@@ -767,7 +845,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     //                                                                Optimistic Lock Info\r
     //                                                                ====================\r
     @Override\r
-    protected boolean hasVersionNoValue(${glEntityInterfaceName} entity) {\r
+    protected boolean hasVersionNoValue(Entity entity) {\r
 #if ($table.isUseVersionNo())\r
         return !(downcast(entity).get${table.versionNoJavaName}() + "").equals("null");// For primitive type\r
 #else\r
@@ -776,7 +854,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     }\r
 \r
     @Override\r
-    protected boolean hasUpdateDateValue(${glEntityInterfaceName} entity) {\r
+    protected boolean hasUpdateDateValue(Entity entity) {\r
 #if ($table.isUseUpdateDate())\r
         return downcast(entity).get${table.updateDateJavaName}() != null;\r
 #else\r
@@ -787,7 +865,7 @@ public abstract class ${myClassName} extends ${glPackageBaseCommonBhv}.${myExten
     // ===================================================================================\r
     //                                                                              Helper\r
     //                                                                              ======\r
-    protected ${myExtendedObjectClassName} downcast(${glEntityInterfaceName} entity) {\r
+    protected ${myExtendedObjectClassName} downcast(Entity entity) {\r
         return helpDowncastInternally(entity, ${myExtendedObjectClassName}.class);\r
     }\r
 }\r