diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
index 79551ce..b282a04 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
@@ -204,7 +204,7 @@ export const formSchema: FormSchema[] = [
              fieldConfig:${po.dictField},
              multi:${po.extendParams.popupMulti?c},
          }
-     }
+     },
      <#elseif po.classType =='sel_depart'>
      component: 'JSelectDept',
      <#elseif po.classType =='switch'>
@@ -213,7 +213,7 @@ export const formSchema: FormSchema[] = [
          <#if po.dictField != 'is_open'>
          options:${po.dictField}
          </#if>
-     }
+     },
      <#elseif po.classType =='pca'>
     component: 'JAreaLinkage',
     <#elseif po.classType =='markdown'>
@@ -224,30 +224,30 @@ export const formSchema: FormSchema[] = [
     component: 'JSelectUserByDept',
     componentProps:{
         labelKey:'realname',
-     }
+     },
     <#elseif po.classType =='textarea'>
     component: 'InputTextArea',//TODO 注意string转换问题
     <#elseif po.classType=='list' || po.classType=='radio'>
     component: 'JDictSelectTag',
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='list_multi' || po.classType=='checkbox'>
     component: 'JMultiSelectTag',//TODO  暂无该组件
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='sel_search'>
     component: 'JSearchSelect',
     componentProps:{
        dict:"${form_field_dictCode}"
-    }
+    },
 <#elseif po.classType=='cat_tree'>
     <#assign form_cat_tree = true>
     component: 'JCategorySelect',
     componentProps:{
        pcode:"${po.dictField?default("")}", //TODO back和事件未添加,暂时有问题
-    }
+    },
     <#if po.dictText?default("")?trim?length gt 1>
     <#assign form_cat_back = "${po.dictText}">
     </#if>
@@ -259,14 +259,14 @@ export const formSchema: FormSchema[] = [
     <#if po.uploadnum??>
        maxCount:${po.uploadnum}
    </#if>
-     }
+     },
  <#elseif po.classType=='image'>
      component: 'JImageUpload',
      componentProps:{
      <#if po.uploadnum??>
         fileMax:${po.uploadnum}
     </#if>
-      }
+      },
   <#elseif po.classType=='umeditor'>
     component: 'JCodeEditor', //TODO String后缀暂未添加
   <#elseif po.classType == 'sel_tree'>
@@ -282,7 +282,7 @@ export const formSchema: FormSchema[] = [
         </#if>
         </#if>
         pidValue:"${po.dictField}",
-    }
+    },
    <#else>
     component: 'Input',
     </#if>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
index 94bdfc9..7f99d42 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
@@ -34,7 +34,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	</#list>
 	
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void saveMain(${entityName} ${entityName?uncap_first}, <#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
 		${entityName?uncap_first}Mapper.insert(${entityName?uncap_first});
 		<#list subTables as sub>
@@ -55,7 +55,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
 		${entityName?uncap_first}Mapper.updateById(${entityName?uncap_first});
 		
@@ -83,7 +83,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delMain(String id) {
 		<#list subTables as sub>
 		${sub.entityName?uncap_first}Mapper.deleteByMainId(id);
@@ -92,7 +92,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delBatchMain(Collection<? extends Serializable> idList) {
 		for(Serializable id:idList) {
 			<#list subTables as sub>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
index 4595cb2..340a5ae 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/default/tree/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
@@ -204,7 +204,7 @@ export const formSchema: FormSchema[] = [
              fieldConfig:${po.dictField},
              multi:${po.extendParams.popupMulti?c},
          }
-     }
+     },
      <#elseif po.classType =='sel_depart'>
      component: 'JSelectDept',
      <#elseif po.classType =='switch'>
@@ -213,7 +213,7 @@ export const formSchema: FormSchema[] = [
          <#if po.dictField != 'is_open'>
          options:${po.dictField}
          </#if>
-     }
+     },
      <#elseif po.classType =='pca'>
     component: 'JAreaLinkage',
     <#elseif po.classType =='markdown'>
@@ -224,30 +224,30 @@ export const formSchema: FormSchema[] = [
     component: 'JSelectUserByDept',
     componentProps:{
         labelKey:'realname',
-     }
+     },
     <#elseif po.classType =='textarea'>
     component: 'InputTextArea',//TODO 注意string转换问题
     <#elseif po.classType=='list' || po.classType=='radio'>
     component: 'JDictSelectTag',
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='list_multi' || po.classType=='checkbox'>
     component: 'JMultiSelectTag',//TODO  暂无该组件
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='sel_search'>
     component: 'JSearchSelect',
     componentProps:{
        dict:"${form_field_dictCode}"
-    }
+    },
 <#elseif po.classType=='cat_tree'>
     <#assign form_cat_tree = true>
     component: 'JCategorySelect',
     componentProps:{
        pcode:"${po.dictField?default("")}", //TODO back和事件未添加,暂时有问题
-    }
+    },
     <#if po.dictText?default("")?trim?length gt 1>
     <#assign form_cat_back = "${po.dictText}">
     </#if>
@@ -259,14 +259,14 @@ export const formSchema: FormSchema[] = [
     <#if po.uploadnum??>
        maxCount:${po.uploadnum}
    </#if>
-     }
+     },
  <#elseif po.classType=='image'>
      component: 'JImageUpload',
      componentProps:{
      <#if po.uploadnum??>
         fileMax:${po.uploadnum}
     </#if>
-      }
+      },
   <#elseif po.classType=='umeditor'>
     component: 'JCodeEditor', //TODO String后缀暂未添加
   <#elseif po.classType == 'sel_tree'>
@@ -282,7 +282,7 @@ export const formSchema: FormSchema[] = [
         </#if>
         </#if>
         pidValue:"${po.dictField}",
-    }
+    },
    <#else>
     component: 'Input',
     </#if>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
index 4484029..a98cfee 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
@@ -34,7 +34,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	</#list>
 	
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delMain(String id) {
 		<#list subTables as sub>
 		${sub.entityName?uncap_first}Mapper.deleteByMainId(id);
@@ -43,7 +43,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delBatchMain(Collection<? extends Serializable> idList) {
 		for(Serializable id:idList) {
 			<#list subTables as sub>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
index 51c81c7..5c01879 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/erp/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
@@ -202,7 +202,7 @@ export const formSchema: FormSchema[] = [
              fieldConfig:${po.dictField},
              multi:${po.extendParams.popupMulti?c},
          }
-     }
+     },
      <#elseif po.classType =='sel_depart'>
      component: 'JSelectDept',
      <#elseif po.classType =='switch'>
@@ -211,7 +211,7 @@ export const formSchema: FormSchema[] = [
          <#if po.dictField != 'is_open'>
          options:${po.dictField}
          </#if>
-     }
+     },
      <#elseif po.classType =='pca'>
     component: 'JAreaLinkage',
     <#elseif po.classType =='markdown'>
@@ -222,30 +222,30 @@ export const formSchema: FormSchema[] = [
     component: 'JSelectUserByDept',
     componentProps:{
         labelKey:'realname',
-     }
+     },
     <#elseif po.classType =='textarea'>
     component: 'InputTextArea',//TODO 注意string转换问题
     <#elseif po.classType=='list' || po.classType=='radio'>
     component: 'JDictSelectTag',
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='list_multi' || po.classType=='checkbox'>
     component: 'JMultiSelectTag',//TODO  暂无该组件
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='sel_search'>
     component: 'JSearchSelect',
     componentProps:{
        dict:"${form_field_dictCode}"
-    }
+    },
 <#elseif po.classType=='cat_tree'>
     <#assign form_cat_tree = true>
     component: 'JCategorySelect',
     componentProps:{
        pcode:"${po.dictField?default("")}", //TODO back和事件未添加,暂时有问题
-    }
+    },
     <#if po.dictText?default("")?trim?length gt 1>
     <#assign form_cat_back = "${po.dictText}">
     </#if>
@@ -257,14 +257,14 @@ export const formSchema: FormSchema[] = [
     <#if po.uploadnum??>
        maxCount:${po.uploadnum}
    </#if>
-     }
+     },
  <#elseif po.classType=='image'>
      component: 'JImageUpload',
      componentProps:{
      <#if po.uploadnum??>
         fileMax:${po.uploadnum}
     </#if>
-      }
+      },
   <#elseif po.classType=='umeditor'>
     component: 'JCodeEditor', //TODO String后缀暂未添加
   <#elseif po.classType == 'sel_tree'>
@@ -280,7 +280,7 @@ export const formSchema: FormSchema[] = [
         </#if>
         </#if>
         pidValue:"${po.dictField}",
-    }
+    },
    <#else>
     component: 'Input',
     </#if>
@@ -344,7 +344,7 @@ export const formSchema: FormSchema[] = [
      },
     </#if>
     <#if po.readonly=='Y'>
-    dynamicDisabled:true
+    dynamicDisabled:true,
     </#if>
   },
 </#if>
@@ -450,7 +450,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
              fieldConfig:${po.dictField},
              multi:${po.extendParams.popupMulti?c},
          }
-     }
+     },
      <#elseif po.classType =='sel_depart'>
      component: 'JSelectDept',
      <#elseif po.classType =='switch'>
@@ -459,7 +459,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
          <#if po.dictField != 'is_open'>
          options:${po.dictField}
          </#if>
-     }
+     },
      <#elseif po.classType =='pca'>
     component: 'JAreaLinkage',
     <#elseif po.classType =='markdown'>
@@ -470,30 +470,30 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
     component: 'JSelectUserByDept',
     componentProps:{
         labelKey:'realname',
-     }
+     },
     <#elseif po.classType =='textarea'>
     component: 'InputTextArea',//TODO 注意string转换问题
     <#elseif po.classType=='list' || po.classType=='radio'>
     component: 'JDictSelectTag',
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='list_multi' || po.classType=='checkbox'>
     component: 'JMultiSelectTag',//TODO  暂无该组件
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='sel_search'>
     component: 'JSearchSelect',
     componentProps:{
        dict:"${form_field_dictCode}"
-    }
+    },
 <#elseif po.classType=='cat_tree'>
     <#assign form_cat_tree = true>
     component: 'JCategorySelect',
     componentProps:{
        pcode:"${po.dictField?default("")}", //TODO back和事件未添加,暂时有问题
-    }
+    },
     <#if po.dictText?default("")?trim?length gt 1>
     <#assign form_cat_back = "${po.dictText}">
     </#if>
@@ -505,14 +505,14 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
     <#if po.uploadnum??>
        maxCount:${po.uploadnum}
    </#if>
-     }
+     },
  <#elseif po.classType=='image'>
      component: 'JImageUpload',
      componentProps:{
      <#if po.uploadnum??>
         fileMax:${po.uploadnum}
     </#if>
-      }
+      },
   <#elseif po.classType=='umeditor'>
     component: 'JCodeEditor', //TODO String后缀暂未添加
   <#elseif po.classType == 'sel_tree'>
@@ -528,7 +528,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
         </#if>
         </#if>
         pidValue:"${po.dictField}",
-    }
+    },
    <#else>
     component: 'Input',
     </#if>
@@ -592,7 +592,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
      },
     </#if>
     <#if po.readonly=='Y'>
-    dynamicDisabled:true
+    dynamicDisabled:true,
     </#if>
   },
 </#if>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
index 94bdfc9..7f99d42 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
@@ -34,7 +34,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	</#list>
 	
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void saveMain(${entityName} ${entityName?uncap_first}, <#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
 		${entityName?uncap_first}Mapper.insert(${entityName?uncap_first});
 		<#list subTables as sub>
@@ -55,7 +55,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
 		${entityName?uncap_first}Mapper.updateById(${entityName?uncap_first});
 		
@@ -83,7 +83,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delMain(String id) {
 		<#list subTables as sub>
 		${sub.entityName?uncap_first}Mapper.deleteByMainId(id);
@@ -92,7 +92,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delBatchMain(Collection<? extends Serializable> idList) {
 		for(Serializable id:idList) {
 			<#list subTables as sub>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
index a1865f7..178e2ea 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/inner-table/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
@@ -205,7 +205,7 @@ export const formSchema: FormSchema[] = [
              fieldConfig:${po.dictField},
              multi:${po.extendParams.popupMulti?c},
          }
-     }
+     },
      <#elseif po.classType =='sel_depart'>
      component: 'JSelectDept',
      <#elseif po.classType =='switch'>
@@ -214,7 +214,7 @@ export const formSchema: FormSchema[] = [
          <#if po.dictField != 'is_open'>
          options:${po.dictField}
          </#if>
-     }
+     },
      <#elseif po.classType =='pca'>
     component: 'JAreaLinkage',
     <#elseif po.classType =='markdown'>
@@ -225,30 +225,30 @@ export const formSchema: FormSchema[] = [
     component: 'JSelectUserByDept',
     componentProps:{
         labelKey:'realname',
-     }
+     },
     <#elseif po.classType =='textarea'>
     component: 'InputTextArea',//TODO 注意string转换问题
     <#elseif po.classType=='list' || po.classType=='radio'>
     component: 'JDictSelectTag',
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='list_multi' || po.classType=='checkbox'>
     component: 'JMultiSelectTag',//TODO  暂无该组件
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='sel_search'>
     component: 'JSearchSelect',
     componentProps:{
        dict:"${form_field_dictCode}"
-    }
+    },
 <#elseif po.classType=='cat_tree'>
     <#assign form_cat_tree = true>
     component: 'JCategorySelect',
     componentProps:{
        pcode:"${po.dictField?default("")}", //TODO back和事件未添加,暂时有问题
-    }
+    },
     <#if po.dictText?default("")?trim?length gt 1>
     <#assign form_cat_back = "${po.dictText}">
     </#if>
@@ -260,14 +260,14 @@ export const formSchema: FormSchema[] = [
     <#if po.uploadnum??>
        maxCount:${po.uploadnum}
    </#if>
-     }
+     },
  <#elseif po.classType=='image'>
      component: 'JImageUpload',
      componentProps:{
      <#if po.uploadnum??>
         fileMax:${po.uploadnum}
     </#if>
-      }
+      },
   <#elseif po.classType=='umeditor'>
     component: 'JCodeEditor', //TODO String后缀暂未添加
   <#elseif po.classType == 'sel_tree'>
@@ -283,7 +283,7 @@ export const formSchema: FormSchema[] = [
         </#if>
         </#if>
         pidValue:"${po.dictField}",
-    }
+    },
    <#else>
     component: 'Input',
     </#if>
@@ -456,7 +456,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
              fieldConfig:${po.dictField},
              multi:${po.extendParams.popupMulti?c},
          }
-     }
+     },
      <#elseif po.classType =='sel_depart'>
      component: 'JSelectDept',
      <#elseif po.classType =='switch'>
@@ -465,7 +465,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
          <#if po.dictField != 'is_open'>
          options:${po.dictField}
          </#if>
-     }
+     },
      <#elseif po.classType =='pca'>
     component: 'JAreaLinkage',
     <#elseif po.classType =='markdown'>
@@ -476,30 +476,30 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
     component: 'JSelectUserByDept',
     componentProps:{
         labelKey:'realname',
-     }
+     },
     <#elseif po.classType =='textarea'>
     component: 'InputTextArea',//TODO 注意string转换问题
     <#elseif po.classType=='list' || po.classType=='radio'>
     component: 'JDictSelectTag',
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='list_multi' || po.classType=='checkbox'>
     component: 'JMultiSelectTag',//TODO  暂无该组件
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='sel_search'>
     component: 'JSearchSelect',
     componentProps:{
        dict:"${form_field_dictCode}"
-    }
+    },
 <#elseif po.classType=='cat_tree'>
     <#assign form_cat_tree = true>
     component: 'JCategorySelect',
     componentProps:{
        pcode:"${po.dictField?default("")}", //TODO back和事件未添加,暂时有问题
-    }
+    },
     <#if po.dictText?default("")?trim?length gt 1>
     <#assign form_cat_back = "${po.dictText}">
     </#if>
@@ -511,14 +511,14 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
     <#if po.uploadnum??>
        maxCount:${po.uploadnum}
    </#if>
-     }
+     },
  <#elseif po.classType=='image'>
      component: 'JImageUpload',
      componentProps:{
      <#if po.uploadnum??>
         fileMax:${po.uploadnum}
     </#if>
-      }
+      },
   <#elseif po.classType=='umeditor'>
     component: 'JCodeEditor', //TODO String后缀暂未添加
   <#elseif po.classType == 'sel_tree'>
@@ -534,7 +534,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
         </#if>
         </#if>
         pidValue:"${po.dictField}",
-    }
+    },
    <#else>
     component: 'Input',
     </#if>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
index 94bdfc9..7f99d42 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
@@ -34,7 +34,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	</#list>
 	
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void saveMain(${entityName} ${entityName?uncap_first}, <#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
 		${entityName?uncap_first}Mapper.insert(${entityName?uncap_first});
 		<#list subTables as sub>
@@ -55,7 +55,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
 		${entityName?uncap_first}Mapper.updateById(${entityName?uncap_first});
 		
@@ -83,7 +83,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delMain(String id) {
 		<#list subTables as sub>
 		${sub.entityName?uncap_first}Mapper.deleteByMainId(id);
@@ -92,7 +92,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delBatchMain(Collection<? extends Serializable> idList) {
 		for(Serializable id:idList) {
 			<#list subTables as sub>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
index b07e0d7..420aaa8 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/jvxe/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
@@ -205,7 +205,7 @@ export const formSchema: FormSchema[] = [
              fieldConfig:${po.dictField},
              multi:${po.extendParams.popupMulti?c},
          }
-     }
+     },
      <#elseif po.classType =='sel_depart'>
      component: 'JSelectDept',
      <#elseif po.classType =='switch'>
@@ -214,7 +214,7 @@ export const formSchema: FormSchema[] = [
          <#if po.dictField != 'is_open'>
          options:${po.dictField}
          </#if>
-     }
+     },
      <#elseif po.classType =='pca'>
     component: 'JAreaLinkage',
     <#elseif po.classType =='markdown'>
@@ -225,30 +225,30 @@ export const formSchema: FormSchema[] = [
     component: 'JSelectUserByDept',
     componentProps:{
         labelKey:'realname',
-     }
+     },
     <#elseif po.classType =='textarea'>
     component: 'InputTextArea',//TODO 注意string转换问题
     <#elseif po.classType=='list' || po.classType=='radio'>
     component: 'JDictSelectTag',
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='list_multi' || po.classType=='checkbox'>
     component: 'JMultiSelectTag',//TODO  暂无该组件
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='sel_search'>
     component: 'JSearchSelect',
     componentProps:{
        dict:"${form_field_dictCode}"
-    }
+    },
 <#elseif po.classType=='cat_tree'>
     <#assign form_cat_tree = true>
     component: 'JCategorySelect',
     componentProps:{
        pcode:"${po.dictField?default("")}", //TODO back和事件未添加,暂时有问题
-    }
+    },
     <#if po.dictText?default("")?trim?length gt 1>
     <#assign form_cat_back = "${po.dictText}">
     </#if>
@@ -260,14 +260,14 @@ export const formSchema: FormSchema[] = [
     <#if po.uploadnum??>
        maxCount:${po.uploadnum}
    </#if>
-     }
+     },
  <#elseif po.classType=='image'>
      component: 'JImageUpload',
      componentProps:{
      <#if po.uploadnum??>
         fileMax:${po.uploadnum}
     </#if>
-      }
+      },
   <#elseif po.classType=='umeditor'>
     component: 'JCodeEditor', //TODO String后缀暂未添加
   <#elseif po.classType == 'sel_tree'>
@@ -283,7 +283,7 @@ export const formSchema: FormSchema[] = [
         </#if>
         </#if>
         pidValue:"${po.dictField}",
-    }
+    },
    <#else>
     component: 'Input',
     </#if>
@@ -393,7 +393,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
              fieldConfig:${po.dictField},
              multi:${po.extendParams.popupMulti?c},
          }
-     }
+     },
      <#elseif po.classType =='sel_depart'>
      component: 'JSelectDept',
      <#elseif po.classType =='switch'>
@@ -402,7 +402,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
          <#if po.dictField != 'is_open'>
          options:${po.dictField}
          </#if>
-     }
+     },
      <#elseif po.classType =='pca'>
     component: 'JAreaLinkage',
     <#elseif po.classType =='markdown'>
@@ -413,14 +413,14 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
     component: 'JSelectUserByDept',
     componentProps:{
         labelKey:'realname',
-     }
+     },
     <#elseif po.classType =='textarea'>
     component: 'InputTextArea',//TODO 注意string转换问题
     <#elseif po.classType=='list' || po.classType=='radio'>
     component: 'JDictSelectTag',
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='list_multi' || po.classType=='checkbox'>
     component: 'JMultiSelectTag',//TODO  暂无该组件
     componentProps:{
@@ -430,13 +430,13 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
     component: 'JSearchSelect',
     componentProps:{
        dict:"${form_field_dictCode}"
-    }
+    },
 <#elseif po.classType=='cat_tree'>
     <#assign form_cat_tree = true>
     component: 'JCategorySelect',
     componentProps:{
        pcode:"${po.dictField?default("")}", //TODO back和事件未添加,暂时有问题
-    }
+    },
     <#if po.dictText?default("")?trim?length gt 1>
     <#assign form_cat_back = "${po.dictText}">
     </#if>
@@ -448,14 +448,14 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
     <#if po.uploadnum??>
        maxCount:${po.uploadnum}
    </#if>
-     }
+     },
  <#elseif po.classType=='image'>
      component: 'JImageUpload',
      componentProps:{
      <#if po.uploadnum??>
         fileMax:${po.uploadnum}
     </#if>
-      }
+      },
   <#elseif po.classType=='umeditor'>
     component: 'JCodeEditor', //TODO String后缀暂未添加
   <#elseif po.classType == 'sel_tree'>
@@ -471,7 +471,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
         </#if>
         </#if>
         pidValue:"${po.dictField}",
-    }
+    },
    <#else>
     component: 'Input',
     </#if>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
index 94bdfc9..7f99d42 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
@@ -34,7 +34,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	</#list>
 	
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void saveMain(${entityName} ${entityName?uncap_first}, <#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
 		${entityName?uncap_first}Mapper.insert(${entityName?uncap_first});
 		<#list subTables as sub>
@@ -55,7 +55,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
 		${entityName?uncap_first}Mapper.updateById(${entityName?uncap_first});
 		
@@ -83,7 +83,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delMain(String id) {
 		<#list subTables as sub>
 		${sub.entityName?uncap_first}Mapper.deleteByMainId(id);
@@ -92,7 +92,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delBatchMain(Collection<? extends Serializable> idList) {
 		for(Serializable id:idList) {
 			<#list subTables as sub>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
index 96cb6e8..11b7cd5 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template-online/tab/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
@@ -205,7 +205,7 @@ export const formSchema: FormSchema[] = [
              fieldConfig:${po.dictField},
              multi:${po.extendParams.popupMulti?c},
          }
-     }
+     },
      <#elseif po.classType =='sel_depart'>
      component: 'JSelectDept',
      <#elseif po.classType =='switch'>
@@ -214,7 +214,7 @@ export const formSchema: FormSchema[] = [
          <#if po.dictField != 'is_open'>
          options:${po.dictField}
          </#if>
-     }
+     },
      <#elseif po.classType =='pca'>
     component: 'JAreaLinkage',
     <#elseif po.classType =='markdown'>
@@ -225,30 +225,30 @@ export const formSchema: FormSchema[] = [
     component: 'JSelectUserByDept',
     componentProps:{
         labelKey:'realname',
-     }
+     },
     <#elseif po.classType =='textarea'>
     component: 'InputTextArea',//TODO 注意string转换问题
     <#elseif po.classType=='list' || po.classType=='radio'>
     component: 'JDictSelectTag',
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='list_multi' || po.classType=='checkbox'>
     component: 'JMultiSelectTag',//TODO  暂无该组件
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='sel_search'>
     component: 'JSearchSelect',
     componentProps:{
        dict:"${form_field_dictCode}"
-    }
+    },
 <#elseif po.classType=='cat_tree'>
     <#assign form_cat_tree = true>
     component: 'JCategorySelect',
     componentProps:{
        pcode:"${po.dictField?default("")}", //TODO back和事件未添加,暂时有问题
-    }
+    },
     <#if po.dictText?default("")?trim?length gt 1>
     <#assign form_cat_back = "${po.dictText}">
     </#if>
@@ -260,14 +260,14 @@ export const formSchema: FormSchema[] = [
     <#if po.uploadnum??>
        maxCount:${po.uploadnum}
    </#if>
-     }
+     },
  <#elseif po.classType=='image'>
      component: 'JImageUpload',
      componentProps:{
      <#if po.uploadnum??>
         fileMax:${po.uploadnum}
     </#if>
-      }
+      },
   <#elseif po.classType=='umeditor'>
     component: 'JCodeEditor', //TODO String后缀暂未添加
   <#elseif po.classType == 'sel_tree'>
@@ -283,7 +283,7 @@ export const formSchema: FormSchema[] = [
         </#if>
         </#if>
         pidValue:"${po.dictField}",
-    }
+    },
    <#else>
     component: 'Input',
     </#if>
@@ -393,7 +393,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
              fieldConfig:${po.dictField},
              multi:${po.extendParams.popupMulti?c},
          }
-     }
+     },
      <#elseif po.classType =='sel_depart'>
      component: 'JSelectDept',
      <#elseif po.classType =='switch'>
@@ -402,7 +402,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
          <#if po.dictField != 'is_open'>
          options:${po.dictField}
          </#if>
-     }
+     },
      <#elseif po.classType =='pca'>
     component: 'JAreaLinkage',
     <#elseif po.classType =='markdown'>
@@ -413,30 +413,30 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
     component: 'JSelectUserByDept',
     componentProps:{
         labelKey:'realname',
-     }
+     },
     <#elseif po.classType =='textarea'>
     component: 'InputTextArea',//TODO 注意string转换问题
     <#elseif po.classType=='list' || po.classType=='radio'>
     component: 'JDictSelectTag',
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='list_multi' || po.classType=='checkbox'>
     component: 'JMultiSelectTag',//TODO  暂无该组件
     componentProps:{
         dictCode:"${form_field_dictCode}"
-     }
+     },
     <#elseif po.classType=='sel_search'>
     component: 'JSearchSelect',
     componentProps:{
        dict:"${form_field_dictCode}"
-    }
+    },
 <#elseif po.classType=='cat_tree'>
     <#assign form_cat_tree = true>
     component: 'JCategorySelect',
     componentProps:{
        pcode:"${po.dictField?default("")}", //TODO back和事件未添加,暂时有问题
-    }
+    },
     <#if po.dictText?default("")?trim?length gt 1>
     <#assign form_cat_back = "${po.dictText}">
     </#if>
@@ -448,14 +448,14 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
     <#if po.uploadnum??>
        maxCount:${po.uploadnum}
    </#if>
-     }
+     },
  <#elseif po.classType=='image'>
      component: 'JImageUpload',
      componentProps:{
      <#if po.uploadnum??>
         fileMax:${po.uploadnum}
     </#if>
-      }
+      },
   <#elseif po.classType=='umeditor'>
     component: 'JCodeEditor', //TODO String后缀暂未添加
   <#elseif po.classType == 'sel_tree'>
@@ -471,7 +471,7 @@ export const ${sub.entityName?uncap_first}FormSchema: FormSchema[] = [
         </#if>
         </#if>
         pidValue:"${po.dictField}",
-    }
+    },
    <#else>
     component: 'Input',
     </#if>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
index 8c079bd..3515c49 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/one/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
@@ -50,12 +50,12 @@ export const formSchema: FormSchema[] = [
       valueFormat: 'YYYY-MM-DD hh:mm:ss',
     },
      <#elseif "int,decimal,double,"?contains(po.fieldType)>
-    component: 'InputNumber'
+    component: 'InputNumber',
      <#else>
-    component: 'Input'
+    component: 'Input',
     </#if>
     <#if po.fieldName =='id'><#rt/>
-    show:false
+    show:false,
     </#if>
   },
 </#list>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
index 8c079bd..3515c49 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/one2/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
@@ -50,12 +50,12 @@ export const formSchema: FormSchema[] = [
       valueFormat: 'YYYY-MM-DD hh:mm:ss',
     },
      <#elseif "int,decimal,double,"?contains(po.fieldType)>
-    component: 'InputNumber'
+    component: 'InputNumber',
      <#else>
-    component: 'Input'
+    component: 'Input',
     </#if>
     <#if po.fieldName =='id'><#rt/>
-    show:false
+    show:false,
     </#if>
   },
 </#list>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
index fa8d61b..1fd8198 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
@@ -34,7 +34,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	</#list>
 	
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void saveMain(${entityName} ${entityName?uncap_first}, <#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
 		${entityName?uncap_first}Mapper.insert(${entityName?uncap_first});
 		<#list subTables as sub>
@@ -53,7 +53,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
 		${entityName?uncap_first}Mapper.updateById(${entityName?uncap_first});
 		
@@ -79,7 +79,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delMain(String id) {
 		<#list subTables as sub>
 		${sub.entityName?uncap_first}Mapper.deleteByMainId(id);
@@ -88,7 +88,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delBatchMain(Collection<? extends Serializable> idList) {
 		for(Serializable id:idList) {
 			<#list subTables as sub>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
index b3e9a5d..98092f3 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
@@ -59,12 +59,12 @@ export const formSchema: FormSchema[] = [
       valueFormat: 'YYYY-MM-DD hh:mm:ss',
     },
      <#elseif "int,decimal,double,"?contains(po.fieldType)>
-    component: 'InputNumber'
+    component: 'InputNumber',
      <#else>
-    component: 'Input'
+    component: 'Input',
     </#if>
     <#if po.fieldName =='id'><#rt/>
-    show:false
+    show:false,
     </#if>
   },
 </#list>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
index fa8d61b..1fd8198 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/service/impl/${entityName}ServiceImpl.javai
@@ -34,7 +34,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	</#list>
 	
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void saveMain(${entityName} ${entityName?uncap_first}, <#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
 		${entityName?uncap_first}Mapper.insert(${entityName?uncap_first});
 		<#list subTables as sub>
@@ -53,7 +53,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void updateMain(${entityName} ${entityName?uncap_first},<#list subTables as sub>List<${sub.entityName}> ${sub.entityName?uncap_first}List<#if sub_has_next>,</#if></#list>) {
 		${entityName?uncap_first}Mapper.updateById(${entityName?uncap_first});
 		
@@ -79,7 +79,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delMain(String id) {
 		<#list subTables as sub>
 		${sub.entityName?uncap_first}Mapper.deleteByMainId(id);
@@ -88,7 +88,7 @@ public class ${entityName}ServiceImpl extends ServiceImpl<${entityName}Mapper, $
 	}
 
 	@Override
-	@Transactional
+	@Transactional(rollbackFor = Exception.class)
 	public void delBatchMain(Collection<? extends Serializable> idList) {
 		for(Serializable id:idList) {
 			<#list subTables as sub>
diff --git a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
index b9db856..c7e5191 100644
--- a/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
+++ b/jeecg-boot/jeecg-boot-module-system/src/main/resources/jeecg/code-template/onetomany2/java/${bussiPackage}/${entityPackage}/vue3/${entityName}__data.tsi
@@ -58,12 +58,12 @@ export const formSchema: FormSchema[] = [
       valueFormat: 'YYYY-MM-DD hh:mm:ss',
     },
      <#elseif "int,decimal,double,"?contains(po.fieldType)>
-    component: 'InputNumber'
+    component: 'InputNumber',
      <#else>
-    component: 'Input'
+    component: 'Input',
     </#if>
     <#if po.fieldName =='id'><#rt/>
-    show:false
+    show:false,
     </#if>
   },
 </#list>