登陆注册后端接口
Change-Id: Ida548e4f32a505259dd180a5ae1ff8989ccfc076
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