diff --git a/src/main/java/database/DataManagerInterface.java b/src/main/java/database/DataManagerInterface.java
index e2fb1fb..1f4b510 100644
--- a/src/main/java/database/DataManagerInterface.java
+++ b/src/main/java/database/DataManagerInterface.java
@@ -22,9 +22,11 @@
     public Seed GetSeedInformation(String seedid);//返回种子的全部信息;
     public int RegisterSeed(Seed seedinfo);//添加一个新的种子，0成功，其他失败信息待定;
     public int UpdateSeed(Seed seedinfo);//接收新的种子然后更新其全部属性;
+    public int DeleteSeed(String seedid);//删除一个种子，返回状态：0 success，1 不存在,2其他原因
 
     public Seed[] SearchSeed(String userQ);//传入搜索的关键词或句子，返回搜索到的种子信息（按照公共字符数量排序）
     public Seed[] GetSeedListByTag(String tag);//获取某个标签下的种子列表
+    public Seed[] GetSeedListByUser(String userid);//获取某个用户的种子列表
 
     public int AddNotice(Notice notice);//返回状态：0 success，1 重复，2其他原因
     public boolean UpdateNotice(Notice notice);//返回状态：0 success，1 重复，2其他原因
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;
diff --git a/src/main/java/database/Database2.java b/src/main/java/database/Database2.java
index d2d98c7..0e6dadf 100644
--- a/src/main/java/database/Database2.java
+++ b/src/main/java/database/Database2.java
@@ -138,6 +138,16 @@
     }
 
     @Override
+    public Seed[] GetSeedListByUser(String userid) {
+        return new Seed[0];
+    }
+
+    @Override
+    public int DeleteSeed(String seedid) {
+        return 0;
+    }
+
+    @Override
     public boolean AddCollect(String userid, String postid) {
         return false;
     }
