diff --git a/src/main/java/database/Database1.java b/src/main/java/database/Database1.java
index b89dc18..8c3bbb4 100644
--- a/src/main/java/database/Database1.java
+++ b/src/main/java/database/Database1.java
@@ -130,28 +130,36 @@
             if (userinfo.userid == null) {
                 return 2; // userid为null直接返回错误
             }
+            
+            entitymanager.getTransaction().begin();
+            
             JPAQuery<User> query = new JPAQuery<>(entitymanager);
             QUser u = QUser.user;
             User updateUser = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
 
             if(updateUser == null){
+                entitymanager.getTransaction().rollback();
                 return 1;
             }
             // 只更新需要的字段，避免破坏持久化状态和关联关系
-            updateUser.email = userinfo.email;
-            updateUser.username = userinfo.username;
-            updateUser.password = userinfo.password;
-            updateUser.sex = userinfo.sex;
-            updateUser.school = userinfo.school;
-            updateUser.pictureurl = userinfo.pictureurl;
-            updateUser.profile = userinfo.profile;
+            if (userinfo.email != null) updateUser.email = userinfo.email;
+            if (userinfo.username != null) updateUser.username = userinfo.username;
+            if (userinfo.password != null) updateUser.password = userinfo.password;
+            if (userinfo.sex != null) updateUser.sex = userinfo.sex;
+            if (userinfo.school != null) updateUser.school = userinfo.school;
+            if (userinfo.pictureurl != null) updateUser.pictureurl = userinfo.pictureurl;
+            if (userinfo.profile != null) updateUser.profile = userinfo.profile;
             updateUser.accountstate = userinfo.accountstate;
             updateUser.invitetimes = userinfo.invitetimes;
             // 如有其他字段也一并赋值
             entitymanager.merge(updateUser);
+            entitymanager.getTransaction().commit();
             return 0;
         } catch (Exception e) {
             e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
             return 2;
         }
         
@@ -227,6 +235,35 @@
         return seeds.toArray(new Seed[0]);
     }
 
+    @Override
+    public Seed[] GetSeedListByUser(String userid){
+        JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
+        QSeed s = QSeed.seed;
+        List<Seed> seeds = query.select(s).from(s).where(s.seeduserid.eq(userid)).fetch();
+        return seeds.toArray(new Seed[0]);
+    }
+
+    @Override
+    public int DeleteSeed(String seedid){
+        try {
+            entitymanager.getTransaction().begin();
+            Seed seed = entitymanager.find(Seed.class, seedid);
+            if (seed == null) {
+                entitymanager.getTransaction().rollback();
+                return 1; // 种子不存在
+            }
+            entitymanager.remove(seed);
+            entitymanager.getTransaction().commit();
+            return 0; // 成功删除
+        } catch (Exception e) {
+            e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
+            return 2; // 其他错误
+        }
+    }
+
     //添加一个新的种子，0成功，其他失败信息待定;
     @Override
     public int RegisterSeed(Seed seedinfo){
@@ -240,7 +277,7 @@
                 entitymanager.getTransaction().rollback();
                 return 2; // 用户不存在
             }
-            seed.user = user; // 设置种子的用户关联
+            seedinfo.user = user; // 设置种子的用户关联
             if (seed != null) {
                 entitymanager.getTransaction().rollback();
                 return 1;
