diff --git a/src/main/java/database/Database1.java b/src/main/java/database/Database1.java
index e67dcb0..030abdd 100644
--- a/src/main/java/database/Database1.java
+++ b/src/main/java/database/Database1.java
@@ -20,6 +20,7 @@
 import entity.QUserPT;
 import entity.QUserStar;
 import entity.QUserInvite;
+import entity.QPost;
 import entity.Seed;
 import entity.User;
 import entity.UserPT;
@@ -47,12 +48,10 @@
                 return null;
             }
             
-            // 用户名和邮箱应该有且仅有一个不为空
-            boolean hasUsername = userinfo.username != null && !userinfo.username.isEmpty();
             boolean hasEmail = userinfo.email != null && !userinfo.email.isEmpty();
             
             // 如果两个都为空或两个都不为空，返回null
-            if ((!hasUsername && !hasEmail) || (hasUsername && hasEmail)) {
+            if (!hasEmail) {
                 return null;
             }
             
@@ -60,21 +59,13 @@
             QUser u = QUser.user;
             User foundUser = null;
             
-            if (hasUsername) {
-                // 通过用户名和密码查找
-                foundUser = query.select(u)
-                    .from(u)
-                    .where(u.username.eq(userinfo.username)
-                        .and(u.password.eq(userinfo.password)))
-                    .fetchOne();
-            } else {
-                // 通过邮箱和密码查找
-                foundUser = query.select(u)
-                    .from(u)
-                    .where(u.email.eq(userinfo.email)
-                        .and(u.password.eq(userinfo.password)))
-                    .fetchOne();
-            }
+            
+            // 通过邮箱和密码查找
+            foundUser = query.select(u)
+                .from(u)
+                .where(u.email.eq(userinfo.email)
+                    .and(u.password.eq(userinfo.password)))
+                .fetchOne();
             
             // 如果找到匹配的用户则返回用户ID，否则返回null
             return foundUser != null ? foundUser.userid : null;
@@ -108,13 +99,18 @@
                 return 1; // 邮箱重复
             }
 
-             entitymanager.persist(userinfo);
-             return 0; // 注册成功
+            entitymanager.getTransaction().begin();
+            entitymanager.persist(userinfo);
+            entitymanager.getTransaction().commit();
+            return 0; // 注册成功
 
-         }catch(Exception e){
-             e.printStackTrace();
-            return 3;
-         }
+        }catch(Exception e){
+            e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }   
+            return 4;
+        }
          
     }
 
@@ -199,16 +195,24 @@
     @Override
     public int RegisterUserPT(UserPT userinfo){
         try {
+            entitymanager.getTransaction().begin();
+            
             JPAQuery<UserPT> query = new JPAQuery<>(entitymanager);
             QUserPT u = QUserPT.userPT;
             UserPT checkUserPT = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
             if (checkUserPT != null) {
+                entitymanager.getTransaction().rollback();
                 return 1;
             }
+            
             entitymanager.persist(userinfo);
+            entitymanager.getTransaction().commit();
             return 0;
         } catch (Exception e) {
             e.printStackTrace();
+            if (entitymanager.getTransaction().isActive()) {
+                entitymanager.getTransaction().rollback();
+            }
             return 2;
         }
     }
@@ -596,5 +600,13 @@
     }
     //获取所有迁移信息
 
+    @Override
+    public Post[] GetPostList() {
+        JPAQuery<Post> query = new JPAQuery<>(entitymanager);
+        QPost p = QPost.post;
+        List<Post> posts = query.select(p).from(p).fetch();
+        return posts.toArray(new Post[0]);
+    }
+
 }
 
