diff --git a/src/test/java/databasetest/database2Test.java b/src/test/java/databasetest/database2Test.java
index e40e661..efcc28b 100644
--- a/src/test/java/databasetest/database2Test.java
+++ b/src/test/java/databasetest/database2Test.java
@@ -166,37 +166,29 @@
 
     @TestFactory
     Collection<DynamicTest> testDeleteBegSeed() {
-        List<BegInfo> existingBegs = em.createQuery("SELECT b FROM BegInfo b", BegInfo.class)
-                .setMaxResults(1)
-                .getResultList();
-        if (existingBegs.isEmpty()) {
-            return Collections.emptyList();
-        }
-
-        BegInfo begToDelete = existingBegs.get(0);
-        String begId = begToDelete.begid;
-
         return List.of(
-                DynamicTest.dynamicTest("DeleteBegSeed success", () -> {
-                    EntityTransaction tx = em.getTransaction();
-                    try {
-                        tx.begin();
-                        int ret = db.DeleteBegSeed(begId);
-                        Assertions.assertEquals(0, ret, "DeleteBegSeed 应返回0");
-                    } finally {
-                        tx.rollback();
-                    }
-                }),
+            DynamicTest.dynamicTest("DeleteBegSeed success", () -> {
+                String begId = "test_beg_" + (System.currentTimeMillis() + 1);
+                BegInfo beg = new BegInfo();
+                beg.begid = begId;
+                beg.begnumbers = 0;
+                beg.magic = 1;
+                beg.endtime = new Date();
+                beg.hasseed = 0;
 
-                DynamicTest.dynamicTest("DeleteBegSeed not exist", () -> {
-                    int ret = db.DeleteBegSeed("not_exist_beg");
-                    Assertions.assertEquals(1, ret, "不存在的求种任务应返回1");
-                }),
-
-                DynamicTest.dynamicTest("DeleteBegSeed invalid param", () -> {
-                    Assertions.assertEquals(2, db.DeleteBegSeed(null));
-                    Assertions.assertEquals(2, db.DeleteBegSeed(""));
-                }));
+                int addRet = db.AddBegSeed(beg);
+                int delRet = db.DeleteBegSeed(begId);
+                Assertions.assertEquals(0, delRet, "DeleteBegSeed 应返回0");
+            }),
+            DynamicTest.dynamicTest("DeleteBegSeed not exist", () -> {
+                int ret = db.DeleteBegSeed("not_exist_beg");
+                Assertions.assertEquals(1, ret, "不存在的求种任务应返回1");
+            }),
+            DynamicTest.dynamicTest("DeleteBegSeed invalid param", () -> {
+                Assertions.assertEquals(2, db.DeleteBegSeed(null));
+                Assertions.assertEquals(2, db.DeleteBegSeed(""));
+            })
+        );
     }
 
     @TestFactory
