diff --git a/src/main/java/api/ApiController.java b/src/main/java/api/ApiController.java
index 41d9052..b8ee0c1 100644
--- a/src/main/java/api/ApiController.java
+++ b/src/main/java/api/ApiController.java
@@ -25,6 +25,7 @@
 
 import entity.Seed;
 import entity.User;
+import entity.Post;
 
 import java.util.UUID;
 
@@ -308,4 +309,189 @@
             return new ResponseEntity<>("{}", errorHeaders, HttpStatus.INTERNAL_SERVER_ERROR);
         }
     }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<String> loginUser(
+        @RequestBody String requestBody
+    ) {
+        try {
+            // 解析前端发送的JSON数据 {email: xxx, password: xxx}
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            
+            // 获取email和password字段
+            com.fasterxml.jackson.databind.JsonNode emailNode = jsonNode.get("email");
+            com.fasterxml.jackson.databind.JsonNode passwordNode = jsonNode.get("password");
+
+            if (emailNode == null || passwordNode == null) {
+                com.fasterxml.jackson.databind.node.ObjectNode errorJson = mapper.createObjectNode();
+                errorJson.put("message", "缺少必要参数");
+                String jsonError = mapper.writeValueAsString(errorJson);
+                return new ResponseEntity<>(jsonError, HttpStatus.BAD_REQUEST);
+            }
+            
+            String email = emailNode.asText();
+            String password = passwordNode.asText();
+
+            // 参数验证
+            if (email == null || email.trim().isEmpty() || 
+                password == null || password.trim().isEmpty()) {
+                com.fasterxml.jackson.databind.node.ObjectNode errorJson = mapper.createObjectNode();
+                errorJson.put("message", "邮箱和密码不能为空");
+                String jsonError = mapper.writeValueAsString(errorJson);
+                return new ResponseEntity<>(jsonError, HttpStatus.BAD_REQUEST);
+            }
+            
+            // 创建User对象进行登录验证
+            User user = new User();
+            user.email = email.trim();
+            user.password = password;
+            
+            String userid = db1.LoginUser(user);
+            if (userid != null) {
+                com.fasterxml.jackson.databind.node.ObjectNode responseJson = mapper.createObjectNode();
+                responseJson.put("userId", userid);
+                responseJson.put("userid", userid);
+                responseJson.put("message", "登录成功");
+                String jsonResponse = mapper.writeValueAsString(responseJson);
+                return new ResponseEntity<>(jsonResponse, HttpStatus.OK);
+            } else {
+                // 返回JSON格式的错误信息
+                com.fasterxml.jackson.databind.node.ObjectNode errorJson = mapper.createObjectNode();
+                errorJson.put("message", "登录失败，请检查账号密码");
+                String jsonError = mapper.writeValueAsString(errorJson);
+                return new ResponseEntity<>(jsonError, HttpStatus.UNAUTHORIZED);
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            com.fasterxml.jackson.databind.node.ObjectNode errorJson = mapper.createObjectNode();
+            try {
+                errorJson.put("message", "服务器内部错误");
+                String jsonError = mapper.writeValueAsString(errorJson);
+                return new ResponseEntity<>(jsonError, HttpStatus.INTERNAL_SERVER_ERROR);
+            } catch (JsonProcessingException ex) {
+                return new ResponseEntity<>("{\"message\":\"服务器内部错误\"}", HttpStatus.INTERNAL_SERVER_ERROR);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            com.fasterxml.jackson.databind.node.ObjectNode errorJson = mapper.createObjectNode();
+            try {
+                errorJson.put("message", "服务器内部错误");
+                String jsonError = mapper.writeValueAsString(errorJson);
+                return new ResponseEntity<>(jsonError, HttpStatus.INTERNAL_SERVER_ERROR);
+            } catch (JsonProcessingException ex) {
+                return new ResponseEntity<>("{\"message\":\"服务器内部错误\"}", HttpStatus.INTERNAL_SERVER_ERROR);
+            }
+        }
+    }
+
+    @Override
+    @CrossOrigin(origins = "*", allowedHeaders = "*")
+    public ResponseEntity<Integer> registerUser(
+        @RequestBody String requestBody
+    ) {
+        try {
+            System.out.println("Register request body: " + requestBody);
+            // 解析 JSON 数据
+            com.fasterxml.jackson.databind.JsonNode jsonNode = mapper.readTree(requestBody);
+            
+            // 安全地获取字段
+            com.fasterxml.jackson.databind.JsonNode usernameNode = jsonNode.get("username");
+            com.fasterxml.jackson.databind.JsonNode passwordNode = jsonNode.get("password");
+            com.fasterxml.jackson.databind.JsonNode inviteEmailNode = jsonNode.get("invite_email");
+            
+            if (usernameNode == null || passwordNode == null || inviteEmailNode == null) {
+                return new ResponseEntity<>(2, HttpStatus.BAD_REQUEST); // 参数不完整
+            }
+            
+            String username = usernameNode.asText();
+            String password = passwordNode.asText();
+            String inviteEmail = inviteEmailNode.asText();
+            
+            // 参数验证
+            if (username == null || username.trim().isEmpty() || 
+                password == null || password.trim().isEmpty() ||
+                inviteEmail == null || inviteEmail.trim().isEmpty()) {
+                return new ResponseEntity<>(2, HttpStatus.BAD_REQUEST);
+            }
+            
+            // 创建 User 对象
+            User user = new User();
+            user.userid = java.util.UUID.randomUUID().toString(); // 生成唯一用户ID
+            user.username = username.trim();
+            user.password = password;
+            user.email = inviteEmail.trim(); // 使用邀请邮箱作为用户邮箱
+            
+            // 设置默认值
+            user.sex = "m"; // 默认性别
+            user.school = ""; // 默认学校
+            user.pictureurl = ""; // 默认头像URL
+            user.profile = ""; // 默认个人简介
+            user.accountstate = false; // 默认账号状态为正常
+            user.invitetimes = 5; // 默认邀请次数
+            
+            // 设置时间字段
+            user.lastDetectedTime = new java.util.Date();
+            user.fakeLastDetectedTime = new java.util.Date();
+            
+            // 调用数据库注册方法
+            int ret = db1.RegisterUser(user);
+            System.out.println("Register result: " + ret);
+            
+            // // 如果注册成功，还需要创建对应的 UserPT 记录
+            // if (ret == 0) {
+            //     try {
+            //         entity.UserPT userPT = new entity.UserPT();
+            //         userPT.userid = user.userid;
+            //         userPT.magic = 100; // 初始魔力值
+            //         userPT.upload = 0L; // 初始上传量
+            //         userPT.download = 0L; // 初始下载量
+            //         userPT.share = 0.0; // 初始分享率
+            //         userPT.farmurl = ""; // 默认做种路径
+            //         userPT.viptime = 0; // 初始VIP次数
+            //         userPT.user = user; // 设置关联
+                    
+            //         int ptRet = db1.RegisterUserPT(userPT);
+            //         if (ptRet != 0) {
+            //             // 如果 UserPT 创建失败，记录日志但不影响主要注册流程
+            //             System.err.println("Warning: Failed to create UserPT for user " + user.userid);
+            //         }
+            //     } catch (Exception e) {
+            //         System.err.println("Warning: Exception creating UserPT: " + e.getMessage());
+            //     }
+            // }
+            
+            if (ret == 0) {
+                return new ResponseEntity<>(0, HttpStatus.OK); // 返回 0 表示注册成功
+            } else if (ret == 1) {
+                return new ResponseEntity<>(1, HttpStatus.CONFLICT); // 返回 1 表示邮箱重复
+            } else {
+                return new ResponseEntity<>(ret, HttpStatus.BAD_REQUEST); // 返回 2 表示未被邀请或其他错误
+            }
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(2, HttpStatus.INTERNAL_SERVER_ERROR); // 返回 2 表示处理失败
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>(2, HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
+
+    @Override
+    public ResponseEntity<String> getForum() {
+        try {
+            Post[] posts = db1.GetPostList();
+            if (posts == null || posts.length == 0) {
+                return new ResponseEntity<>("[]", HttpStatus.OK); // 返回空数组表示没有帖子
+            }
+            String json = mapper.writeValueAsString(posts);
+            return new ResponseEntity<>(json, HttpStatus.OK);
+        } catch (JsonProcessingException e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", HttpStatus.INTERNAL_SERVER_ERROR);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return new ResponseEntity<>("[]", HttpStatus.INTERNAL_SERVER_ERROR);
+        }
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/api/ApiInterface.java b/src/main/java/api/ApiInterface.java
index 2b4a3a3..4a2c02e 100644
--- a/src/main/java/api/ApiInterface.java
+++ b/src/main/java/api/ApiInterface.java
@@ -62,4 +62,17 @@
     ResponseEntity<String> getUserStat(
         @RequestParam("userid") String userid
     );
+
+    @PostMapping("/login")
+    ResponseEntity<String> loginUser(
+        @RequestBody String requestBody
+    );
+
+    @PostMapping("/register")
+    ResponseEntity<Integer> registerUser(
+        @RequestBody String requestBody
+    );
+
+    @GetMapping("/forum")
+    ResponseEntity<String> getForum();
 }
\ No newline at end of file
diff --git a/src/main/java/database/DataManagerInterface.java b/src/main/java/database/DataManagerInterface.java
index 1f4b510..c1df413 100644
--- a/src/main/java/database/DataManagerInterface.java
+++ b/src/main/java/database/DataManagerInterface.java
@@ -50,6 +50,7 @@
     public int SubmitSeed(String begid,Seed seed);//提交种子，返回状态：0 success，1 重复，2其他原因
     public void SettleBeg();//结算所有求种信息，求种信息中需要增加Beg截止日期，默认14天，期间投票>的则Beg成功，否则Beg失败，并发放对应奖励
 
+    public Post[] GetPostList();//获取用户的帖子列表
     public int AddPost(Post post);//添加一个新的帖子，返回状态：0 success，1 重复，2其他原因
     public int UpdatePost(Post post);//更新一个帖子，返回状态：0 success，1 不存在,2其他原因
     public int DeletePost(String postid);//删除一个帖子，返回状态：0 success，1 不存在,2其他原因
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]);
+    }
+
 }
 
diff --git a/src/main/java/database/Database2.java b/src/main/java/database/Database2.java
index 0e6dadf..7a58953 100644
--- a/src/main/java/database/Database2.java
+++ b/src/main/java/database/Database2.java
@@ -1101,4 +1101,9 @@
             }
         }
     }
+
+    @Override
+    public Post[] GetPostList(){
+        return null;
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/entity/Post.java b/src/main/java/entity/Post.java
index 1593ca0..5245d1c 100644
--- a/src/main/java/entity/Post.java
+++ b/src/main/java/entity/Post.java
@@ -12,7 +12,9 @@
 import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
+import com.querydsl.core.annotations.QueryEntity;
 
+@QueryEntity
 @Entity
 @Table(name = "Post")
 public class Post {
diff --git a/src/main/java/entity/Seed.java b/src/main/java/entity/Seed.java
index 0106325..6c3f98c 100644
--- a/src/main/java/entity/Seed.java
+++ b/src/main/java/entity/Seed.java
@@ -11,9 +11,9 @@
 import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
-import com.querydsl.core.annotations.QueryEntity;
+// import com.querydsl.core.annotations.QueryEntity;
 
-@QueryEntity
+// @QueryEntity
 @Entity
 @Table(name = "Seed")
 public class Seed {
diff --git a/src/main/java/entity/User.java b/src/main/java/entity/User.java
index 0a706ae..f4c64bf 100644
--- a/src/main/java/entity/User.java
+++ b/src/main/java/entity/User.java
@@ -29,7 +29,7 @@
     public String username;
     @Column(name = "password", length = 255, nullable = false)
     public String password;
-    @Column(name = "gender", nullable = false)
+    @Column(name = "gender")
     @JsonProperty("gender")
     public String sex;
 
@@ -62,8 +62,8 @@
     @Column(name = "invite_left", nullable = false)
     @JsonProperty("invite_left")
     public int invitetimes;
-    @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
-    public UserPT userPT;
+    // @OneToOne(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
+    // public UserPT userPT;
 
     // Constructors, getters, setters
     public User() {
diff --git a/src/main/java/entity/UserPT.java b/src/main/java/entity/UserPT.java
index 13c707b..44af840 100644
--- a/src/main/java/entity/UserPT.java
+++ b/src/main/java/entity/UserPT.java
@@ -8,7 +8,7 @@
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
 import javax.persistence.MapsId;
-import javax.persistence.OneToOne;
+import javax.persistence.ManyToOne;
 import javax.persistence.Table;
 
 import com.querydsl.core.annotations.QueryEntity;
@@ -21,9 +21,8 @@
     @Column(name = "user_id", length = 36, nullable = false)
     public String userid;
 
-    @OneToOne(optional = false, fetch = FetchType.LAZY)
-    @MapsId
-    @JoinColumn(name = "user_id", referencedColumnName = "user_id", foreignKey = @ForeignKey(name = "fk_pt_user"))
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "user_id", referencedColumnName = "user_id", foreignKey = @ForeignKey(name = "fk_appeal_user"), insertable = false, updatable = false)
     public User user;
 
     @Column(name = "magic", nullable = false)
diff --git a/src/test/java/cheattest/cheatsystest.java b/src/test/java/cheattest/cheatsystest.java
index 4f3a035..72873dc 100644
--- a/src/test/java/cheattest/cheatsystest.java
+++ b/src/test/java/cheattest/cheatsystest.java
@@ -339,7 +339,7 @@
                 // 创建并设置 UserPT 实例
                 UserPT userPT = new UserPT();
                 userPT.user = user; // 关联 User 实例
-                user.userPT = userPT;
+                // user.userPT = userPT;
 
                 em.getTransaction().begin();
                 em.persist(user);
@@ -390,7 +390,7 @@
                 // 创建并设置 UserPT 实例
                 UserPT userPT1 = new UserPT();
                 userPT1.user = user1; // 关联 User 实例
-                user1.userPT = userPT1;
+                // user1.userPT = userPT1;
 
                 // 插入用户 2（非作弊用户）
                 String userId2 = UUID.randomUUID().toString();
@@ -410,7 +410,7 @@
                 // 创建并设置 UserPT 实例
                 UserPT userPT2 = new UserPT();
                 userPT2.user = user2; // 关联 User 实例
-                user2.userPT = userPT2;
+                // user2.userPT = userPT2;
 
                 em.getTransaction().begin();
                 em.persist(user1);
diff --git a/src/test/java/databasetest/databasesystest.java b/src/test/java/databasetest/databasesystest.java
index 22a9b1e..5f883f9 100644
--- a/src/test/java/databasetest/databasesystest.java
+++ b/src/test/java/databasetest/databasesystest.java
@@ -106,7 +106,7 @@
                     existingUserPT.farmurl = null;
                     existingUserPT.viptime = 0;
                     existingUserPT.user = existingUser;
-                    existingUser.userPT = existingUserPT;
+                    // existingUser.userPT = existingUserPT;
                     
                     em.persist(existingUser);
                     existingUsers.add(existingUser);
@@ -159,7 +159,7 @@
                 invitedUserPT.farmurl = null;
                 invitedUserPT.viptime = 0;
                 invitedUserPT.user = invitedUser;
-                invitedUser.userPT = invitedUserPT;
+                // invitedUser.userPT = invitedUserPT;
                 
                 int ret1 = db.RegisterUser(invitedUser);
                 Assertions.assertEquals(0, ret1, "RegisterUser should return 0 for invited user's first registration");
@@ -241,7 +241,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.flush();
                 // 更新信息
@@ -317,7 +317,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.flush();
                 // 查询
@@ -372,7 +372,7 @@
                 userPT.farmurl = "/data/seeds/" + userId;
                 userPT.viptime = 3 + i;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
@@ -424,7 +424,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
@@ -495,7 +495,7 @@
                 userPT.farmurl = "/path/to/seed" + i;
                 userPT.viptime = 3 + i;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 // em.persist(user);
                 // em.persist(userPT);
                 // em.flush();
@@ -549,7 +549,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 // 再插入Seed
@@ -619,7 +619,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 // 再插入Seed
@@ -713,7 +713,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 // 再插入Seed
@@ -827,7 +827,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
@@ -1011,7 +1011,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
@@ -1058,7 +1058,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
@@ -1118,7 +1118,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
@@ -1190,7 +1190,7 @@
                 userPT.farmurl = null;
                 userPT.viptime = 0;
                 userPT.user = user;
-                user.userPT = userPT;
+                // user.userPT = userPT;
                 em.persist(user);
                 em.persist(userPT);
                 em.flush();
diff --git a/src/test/java/viptest/vipsystest.java b/src/test/java/viptest/vipsystest.java
index 3323b26..07dc979 100644
--- a/src/test/java/viptest/vipsystest.java
+++ b/src/test/java/viptest/vipsystest.java
@@ -88,7 +88,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     // 插入Seed
@@ -167,7 +167,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     entity.Seed seed = new entity.Seed();
@@ -245,7 +245,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     entity.Seed seed = new entity.Seed();
@@ -317,7 +317,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     entity.Seed seed = new entity.Seed();
@@ -388,7 +388,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     entity.Seed seed = new entity.Seed();
@@ -459,7 +459,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     entity.Seed seed = new entity.Seed();
@@ -560,7 +560,7 @@
                     userPT.farmurl = null;
                     userPT.viptime = 0;
                     userPT.user = user;
-                    user.userPT = userPT;
+                    // user.userPT = userPT;
                     em.persist(user);
                     em.persist(userPT);
                     // 插入Seed
