update emf implement

Change-Id: Id967eb0034a7fad33755b7e805b3d73ff49cd79f
diff --git a/src/main/java/cheat/Cheat.java b/src/main/java/cheat/Cheat.java
index 3eecaff..270f2fd 100644
--- a/src/main/java/cheat/Cheat.java
+++ b/src/main/java/cheat/Cheat.java
@@ -1,11 +1,14 @@
 package cheat;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
-import javax.transaction.Transactional;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+import javax.persistence.EntityTransaction;
 
 import org.apache.commons.lang3.tuple.Pair;
 
@@ -19,94 +22,138 @@
 
 public class Cheat implements CheatInterfnterface {
 
-    @PersistenceContext
-    private EntityManager entityManager;
+    private EntityManagerFactory emf;
+
+    public Cheat() {
+        config cfg = new config();
+        Map<String, Object> props = new HashMap<>();
+        props.put("javax.persistence.jdbc.url",
+                "jdbc:mysql://" + cfg.SqlURL + "/" + cfg.Database);
+        props.put("javax.persistence.jdbc.user", cfg.SqlUsername);
+        props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
+        this.emf = Persistence.createEntityManagerFactory("myPersistenceUnit", props);
+    }
+
+    // 测试时注入
+    public Cheat(EntityManagerFactory emf) {
+        this.emf = emf;
+    }
+
+    private EntityManager getEntityManager() {
+        return emf.createEntityManager();
+    }
 
     @Override
-    @Transactional
     public boolean AddAppeal(Appeal appeal) {
+        EntityManager em = getEntityManager();
+        EntityTransaction tx = em.getTransaction();
         try {
-            entityManager.persist(appeal);
+            tx.begin();
+            em.persist(appeal);
+            tx.commit();
         } catch (Exception e) {
+            if (tx.isActive()) {
+                tx.rollback();
+            }
             e.printStackTrace();
             return false;
+        } finally {
+            em.close();
         }
         return true;
     }
 
     @Override
     public Appeal GetAppeal(String appealid) {
+        EntityManager em = getEntityManager();
         try {
-            JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
+            JPAQueryFactory queryFactory = new JPAQueryFactory(em);
             QAppeal qAppeal = QAppeal.appeal;
             Appeal appeal = queryFactory
-                .selectFrom(qAppeal)
-                .where(qAppeal.appealid.eq(appealid))
-                .fetchOne();
+                    .selectFrom(qAppeal)
+                    .where(qAppeal.appealid.eq(appealid))
+                    .fetchOne();
             return appeal;
         } catch (Exception e) {
             e.printStackTrace();
             return null;
+        } finally {
+            em.close();
         }
     }
 
     @Override
     public Appeal[] GetAppealList() {
+        EntityManager em = getEntityManager();
         try {
-            JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
+            JPAQueryFactory queryFactory = new JPAQueryFactory(em);
             QAppeal qAppeal = QAppeal.appeal;
             List<Appeal> appeals = queryFactory
-                .selectFrom(qAppeal)
-                .fetch();
+                    .selectFrom(qAppeal)
+                    .fetch();
             return appeals.toArray(new Appeal[0]);
         } catch (Exception e) {
             e.printStackTrace();
             return null;
+        } finally {
+            em.close();
         }
     }
 
     @Override
     public boolean HandleAppeal(String appealid, Integer status) {
+        EntityManager em = getEntityManager();
+        EntityTransaction tx = em.getTransaction();
         try {
-            Appeal appeal = GetAppeal(appealid);
+            tx.begin();
+            Appeal appeal = em.find(Appeal.class, appealid);
             if (appeal != null) {
                 appeal.status = status;
-                entityManager.merge(appeal);
-                User user = entityManager.find(User.class, appeal.appealuserid);
+                em.merge(appeal);
+                User user = em.find(User.class, appeal.appealuserid);
                 if (user != null && user.accountstate != false) {
                     if (status == 1) {
                         user.accountstate = false;
                     }
-                    entityManager.merge(user);
+                    em.merge(user);
                 }
+                tx.commit();
                 return true;
             }
             return false;
         } catch (Exception e) {
             e.printStackTrace();
             return false;
+        } finally {
+            if (tx.isActive()) {
+                tx.rollback();
+            }
+            em.close();
         }
     }
 
     @Override
     public Pair<String, String>[] GetFakeSeed() {
         List<Pair<String, String>> fakeSeeds = new ArrayList<>();
+        EntityManager em = getEntityManager();
         try {
-            JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
+            JPAQueryFactory queryFactory = new JPAQueryFactory(em);
             QSeed qSeed = QSeed.seed;
             List<com.querydsl.core.Tuple> results = queryFactory
-                .select(qSeed.seedid, qSeed.seeduserid)
-                .from(qSeed)
-                .where(qSeed.faketime.gt(new config().FakeTime))
-                .fetch();
+                    .select(qSeed.seedid, qSeed.seeduserid)
+                    .from(qSeed)
+                    .where(qSeed.faketime.gt(new config().FakeTime))
+                    .fetch();
             for (com.querydsl.core.Tuple result : results) {
                 String seedid = result.get(qSeed.seedid);
-                String userid = result.get(qSeed.seeduserid);
+                String userid  = result.get(qSeed.seeduserid);
                 fakeSeeds.add(Pair.of(seedid, userid));
             }
         } catch (Exception e) {
             e.printStackTrace();
             return null;
+        } finally {
+            em.close();
         }
         return fakeSeeds.toArray(new Pair[0]);
     }
@@ -114,20 +161,23 @@
     @Override
     public String[] GetPunishedUserList() {
         List<String> punishedUsers = new ArrayList<>();
+        EntityManager em = getEntityManager();
         try {
-            JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
+            JPAQueryFactory queryFactory = new JPAQueryFactory(em);
             entity.QUser qUser = entity.QUser.user;
             List<String> results = queryFactory
-                .select(qUser.userid)
-                .from(qUser)
-                .where(qUser.accountstate.isTrue())
-                .fetch();
+                    .select(qUser.userid)
+                    .from(qUser)
+                    .where(qUser.accountstate.isTrue())
+                    .fetch();
             for (String userid : results) {
                 punishedUsers.add(userid);
             }
         } catch (Exception e) {
             e.printStackTrace();
             return null;
+        } finally {
+            em.close();
         }
         return punishedUsers.toArray(new String[0]);
     }
@@ -148,21 +198,17 @@
 
         //     int n = tasks.size();
         //     if (n == 0) continue;
-
         //     double[] xArr = new double[n];
         //     for (int i = 0; i < n; i++) {
         //         TransRecord t = tasks.get(i);
         //         xArr[i] = Math.max(0, t.upload - t.download);
         //     }
-
         //     double sum = 0;
         //     for (double x : xArr) sum += x;
         //     double mu = sum / n;
-
         //     double sqSum = 0;
         //     for (double x : xArr) sqSum += (x - mu) * (x - mu);
         //     double sigma = Math.sqrt(sqSum / n);
-
         //     for (int i = 0; i < n; i++) {
         //         if (Math.abs(xArr[i] - mu) > 3 * sigma) {
         //             User user = entityManager.find(User.class, tasks.get(i).downloaduserid);
@@ -177,27 +223,37 @@
     }
 
     @Override
-    public void DetectFakeSeed(){
+    public void DetectFakeSeed() {
     }
 
     @Override
-    public boolean DetectFakeSeed(String seedid){
+    public boolean DetectFakeSeed(String seedid) {
         return false;
     }
 
     @Override
-    public void PunishUser(){
-        JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
-        entity.QUser qUser = entity.QUser.user;
-        List<User> users = queryFactory
-            .selectFrom(qUser)
-            .where(qUser.detectedCount.gt(new entity.config().CheatTime) 
-                .or(qUser.fakeDetectedCount.gt(new entity.config().FakeTime)))
-            .fetch();
+    public void PunishUser() {
+        EntityManager em = getEntityManager();
+        EntityTransaction tx = em.getTransaction();
+        try {
+            tx.begin();
+            JPAQueryFactory queryFactory = new JPAQueryFactory(em);
+            entity.QUser qUser = entity.QUser.user;
+            List<User> users = queryFactory
+                    .selectFrom(qUser)
+                    .where(qUser.detectedCount.gt(new entity.config().CheatTime)
+                            .or(qUser.fakeDetectedCount.gt(new entity.config().FakeTime)))
+                    .fetch();
 
-        for (User user : users) {
-            user.accountstate = true;
-            entityManager.merge(user);
+            for (User user : users) {
+                user.accountstate = true;
+                em.merge(user);
+            }
+            tx.commit();
+        } catch (Exception e) {
+            if (tx.isActive()) tx.rollback();
+        } finally {
+            em.close();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/database/Database1.java b/src/main/java/database/Database1.java
index ae1fe94..766c90a 100644
--- a/src/main/java/database/Database1.java
+++ b/src/main/java/database/Database1.java
@@ -1,12 +1,12 @@
 package database;
 
-// import java.lang.invoke.TypeDescriptor;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
 import javax.persistence.EntityManager;
-import javax.persistence.PersistenceContext;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
 
 import com.querydsl.jpa.impl.JPAQuery;
 
@@ -25,42 +25,66 @@
 import entity.UserStar;
 
 public class Database1 implements DataManagerInterface {
-    @PersistenceContext
-    private EntityManager entitymanager;
+
+    private EntityManagerFactory emf;
+
+    public Database1() {
+        entity.config cfg = new entity.config();
+        Map<String, Object> props = new HashMap<>();
+        props.put("javax.persistence.jdbc.url", "jdbc:mysql://" + cfg.SqlURL + "/" + cfg.Database);
+        props.put("javax.persistence.jdbc.user", cfg.SqlUsername);
+        props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
+        this.emf = Persistence.createEntityManagerFactory("myPersistenceUnit", props);
+    }
+
+    // 方便测试时注入
+    public Database1(EntityManagerFactory emf) {
+        this.emf = emf;
+    }
+
+    private EntityManager getEntityManager() {
+        return emf.createEntityManager();
+    }
 
     // 返回状态:0 success,1 邮箱重复,2其他原因
     @Override
-    public int RegisterUser(User userinfo){
-        try{
-            JPAQuery<String> query = new JPAQuery<>(entitymanager);
+    public int RegisterUser(User userinfo) {
+        EntityManager em = getEntityManager();
+        try {
+            JPAQuery<String> query = new JPAQuery<>(em);
             QUser u = QUser.user;
             List<String> allEmails = query.select(u.email).from(u).fetch();
 
-            if(allEmails.contains(userinfo.email)){
+            if (allEmails.contains(userinfo.email)) {
                 return 1;
             }
-            entitymanager.persist(userinfo);
+            em.getTransaction().begin();
+            em.persist(userinfo);
+            em.getTransaction().commit();
             return 0;
 
-        }catch(Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             return 2;
+        } finally {
+            em.close();
         }
-        
+
     }
 
     // 返回状态:0 success,1 不存在,2其他原因
     @Override
-    public int UpdateInformation(User userinfo){
+    public int UpdateInformation(User userinfo) {
+        EntityManager em = getEntityManager();
         try {
             if (userinfo.userid == null) {
                 return 2; // userid为null直接返回错误
             }
-            JPAQuery<User> query = new JPAQuery<>(entitymanager);
+            JPAQuery<User> query = new JPAQuery<>(em);
             QUser u = QUser.user;
             User updateUser = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
 
-            if(updateUser == null){
+            if (updateUser == null) {
                 return 1;
             }
             // 只更新需要的字段,避免破坏持久化状态和关联关系
@@ -74,242 +98,305 @@
             updateUser.accountstate = userinfo.accountstate;
             updateUser.invitetimes = userinfo.invitetimes;
             // 如有其他字段也一并赋值
-            entitymanager.merge(updateUser);
+            em.getTransaction().begin();
+            em.merge(updateUser);
+            em.getTransaction().commit();
             return 0;
         } catch (Exception e) {
             e.printStackTrace();
             return 2;
+        } finally {
+            em.close();
         }
-        
+
     }
 
     // 返回用户的全部基本信息
     @Override
-    public User GetInformation(String userid){
-        User user = entitymanager.find(User.class, userid);
-        return user;
+    public User GetInformation(String userid) {
+        EntityManager em = getEntityManager();
+        try {
+            User user = em.find(User.class, userid);
+            return user;
+        } finally {
+            em.close();
+        }
     }
 
     //返回用户的全部pt站信息
     @Override
-    public UserPT GetInformationPT(String userid){
-        UserPT userPT = entitymanager.find(UserPT.class, userid);
-        return userPT;
+    public UserPT GetInformationPT(String userid) {
+        EntityManager em = getEntityManager();
+        try {
+            UserPT userPT = em.find(UserPT.class, userid);
+            return userPT;
+        } finally {
+            em.close();
+        }
     }
 
     //返回状态:0 success,1 邮箱重复,2其他原因
     @Override
-    public int UpdateInformationPT(UserPT userinfo){
-        try{
-            JPAQuery<UserPT> query = new JPAQuery<>(entitymanager);
+    public int UpdateInformationPT(UserPT userinfo) {
+        EntityManager em = getEntityManager();
+        try {
+            JPAQuery<UserPT> query = new JPAQuery<>(em);
             QUserPT u = QUserPT.userPT;
             UserPT userPT = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
-        
-            if(userPT == null){
+
+            if (userPT == null) {
                 return 1;
             }
             userPT = userinfo;
-            entitymanager.merge(userPT);
+            em.getTransaction().begin();
+            em.merge(userPT);
+            em.getTransaction().commit();
             return 0;
 
-        }catch(Exception e){
+        } catch (Exception e) {
             e.printStackTrace();
             return 2;
+        } finally {
+            em.close();
         }
     }
 
     //返回状态:0 success,1 id重复,2其他原因
     @Override
-    public int RegisterUserPT(UserPT userinfo){
+    public int RegisterUserPT(UserPT userinfo) {
+        EntityManager em = getEntityManager();
         try {
-            JPAQuery<UserPT> query = new JPAQuery<>(entitymanager);
+            JPAQuery<UserPT> query = new JPAQuery<>(em);
             QUserPT u = QUserPT.userPT;
             UserPT checkUserPT = query.select(u).from(u).where(u.userid.eq(userinfo.userid)).fetchOne();
             if (checkUserPT != null) {
                 return 1;
             }
-            entitymanager.persist(userinfo);
+            em.getTransaction().begin();
+            em.persist(userinfo);
+            em.getTransaction().commit();
             return 0;
         } catch (Exception e) {
             e.printStackTrace();
             return 2;
+        } finally {
+            em.close();
         }
     }
 
     //返回种子的全部信息
     @Override
-    public Seed GetSeedInformation(String seedid){
-        JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
-        QSeed s = QSeed.seed;
-        Seed seed = query.select(s).from(s).where(s.seedid.eq(seedid)).fetchOne();
-        return seed;
+    public Seed GetSeedInformation(String seedid) {
+        EntityManager em = getEntityManager();
+        try {
+            JPAQuery<Seed> query = new JPAQuery<>(em);
+            QSeed s = QSeed.seed;
+            Seed seed = query.select(s).from(s).where(s.seedid.eq(seedid)).fetchOne();
+            return seed;
+        } finally {
+            em.close();
+        }
     }
 
     //添加一个新的种子,0成功,其他失败信息待定;
     @Override
-    public int RegisterSeed(Seed seedinfo){
+    public int RegisterSeed(Seed seedinfo) {
+        EntityManager em = getEntityManager();
         try {
-            JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
+            JPAQuery<Seed> query = new JPAQuery<>(em);
             QSeed s = QSeed.seed;
             Seed seed = query.select(s).from(s).where(s.seedid.eq(seedinfo.seedid)).fetchOne();
             if (seed != null) {
                 return 1;
             }
-            entitymanager.persist(seedinfo);
+            em.getTransaction().begin();
+            em.persist(seedinfo);
+            em.getTransaction().commit();
             return 0;
         } catch (Exception e) {
             e.printStackTrace();
             return 2;
+        } finally {
+            em.close();
         }
     }
 
     //接收新的种子然后更新其全部属性
     @Override
-    public int UpdateSeed(Seed seedinfo){
+    public int UpdateSeed(Seed seedinfo) {
+        EntityManager em = getEntityManager();
         try {
-            JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
+            JPAQuery<Seed> query = new JPAQuery<>(em);
             QSeed s = QSeed.seed;
             Seed seed = query.select(s).from(s).where(s.seedid.eq(seedinfo.seedid)).fetchOne();
             if (seed == null) {
                 return 1;
             }
             seed = seedinfo;
-            entitymanager.merge(seed);
+            em.getTransaction().begin();
+            em.merge(seed);
+            em.getTransaction().commit();
             return 0;
         } catch (Exception e) {
             e.printStackTrace();
             return 2;
+        } finally {
+            em.close();
         }
     }
 
     //传入搜索的关键词或句子,返回搜索到的种子信息(按照公共字符数量排序)
     @Override
-    public Seed[] SearchSeed(String userQ){
-        JPAQuery<Seed> query = new JPAQuery<>(entitymanager);
-        QSeed s = QSeed.seed;
-        List<Seed> seeds = query.select(s).from(s).fetch();
+    public Seed[] SearchSeed(String userQ) {
+        EntityManager em = getEntityManager();
+        try {
+            JPAQuery<Seed> query = new JPAQuery<>(em);
+            QSeed s = QSeed.seed;
+            List<Seed> seeds = query.select(s).from(s).fetch();
 
-        if (seeds == null || userQ == null || userQ.trim().isEmpty()) {
+            if (seeds == null || userQ == null || userQ.trim().isEmpty()) {
+                return seeds.toArray(new Seed[0]);
+            }
+
+            String processedQuery = userQ.toLowerCase().trim();
+            Map<Seed, Integer> seedCountMap = new HashMap<>();
+            for (Seed seed : seeds) {
+                String title = seed.title.toLowerCase().trim();
+                int count = countCommonCharacter(processedQuery, title);
+                seedCountMap.put(seed, count);
+            }
+            seeds.sort((s1, s2) -> {
+                int count1 = seedCountMap.getOrDefault(s1, 0);
+                int count2 = seedCountMap.getOrDefault(s2, 0);
+                return Integer.compare(count2, count1);
+            });
+
             return seeds.toArray(new Seed[0]);
+        } finally {
+            em.close();
         }
-
-        String processedQuery = userQ.toLowerCase().trim();
-        Map<Seed, Integer> seedCountMap = new HashMap<>();
-        for(Seed seed : seeds){
-            String title = seed.title.toLowerCase().trim();
-            int count = countCommonCharacter(processedQuery, title);
-            seedCountMap.put(seed, count);
-        }
-        seeds.sort((s1, s2) -> {
-            int count1 = seedCountMap.getOrDefault(s1, 0);
-            int count2 = seedCountMap.getOrDefault(s2, 0);
-            return Integer.compare(count2, count1);
-        });
-
-        return seeds.toArray(new Seed[0]);
     }
 
     //计算字符串公共字符数量
-    private int countCommonCharacter(String str1, String str2){
+    private int countCommonCharacter(String str1, String str2) {
         Map<Character, Integer> map1 = new HashMap<>();
         Map<Character, Integer> map2 = new HashMap<>();
 
-        for(char c : str1.toCharArray()){
+        for (char c : str1.toCharArray()) {
             if (!Character.isWhitespace(c)) {
                 map1.put(c, map1.getOrDefault(c, 0) + 1);
             }
         }
 
-        for(char c : str2.toCharArray()){
+        for (char c : str2.toCharArray()) {
             if (!Character.isWhitespace(c)) {
                 map2.put(c, map2.getOrDefault(c, 0) + 1);
             }
         }
 
         int res = 0;
-        for(char c : map1.keySet()){
+        for (char c : map1.keySet()) {
             if (map2.containsKey(c)) {
                 res += Math.min(map1.get(c), map2.get(c));
             }
-            
+
         }
         return res;
     }
 
     //返回状态:0 success,1 重复,2其他原因
     @Override
-    public int AddNotice(Notice notice){
+    public int AddNotice(Notice notice) {
+        EntityManager em = getEntityManager();
         try {
-            JPAQuery<Notice> query = new JPAQuery<>(entitymanager);
+            JPAQuery<Notice> query = new JPAQuery<>(em);
             QNotice n = QNotice.notice;
             Notice checkNotice = query.select(n).from(n).where(n.noticeid.eq(notice.noticeid)).fetchOne();
             if (checkNotice != null) {
                 return 1;
             }
-            
-            entitymanager.persist(notice);
+
+            em.getTransaction().begin();
+            em.persist(notice);
+            em.getTransaction().commit();
             return 0;
         } catch (Exception e) {
             e.printStackTrace();
             return 2;
+        } finally {
+            em.close();
         }
-        
+
     }
 
     //返回状态:0 success,1 不存在,2其他原因
     @Override
-    public boolean UpdateNotice(Notice notice){
+    public boolean UpdateNotice(Notice notice) {
+        EntityManager em = getEntityManager();
         try {
-            Notice oldNotice = entitymanager.find(Notice.class, notice.noticeid);
+            Notice oldNotice = em.find(Notice.class, notice.noticeid);
             if (oldNotice == null) {
                 return false;
             }
             oldNotice = notice;
-            entitymanager.merge(oldNotice);
+            em.getTransaction().begin();
+            em.merge(oldNotice);
+            em.getTransaction().commit();
             return true;
         } catch (Exception e) {
             e.printStackTrace();
             return false;
+        } finally {
+            em.close();
         }
     }
 
     //删除公告,返回状态:0 success,1 不存在,2其他原因
     @Override
-    public boolean DeleteNotice(String noticeid){
+    public boolean DeleteNotice(String noticeid) {
+        EntityManager em = getEntityManager();
         try {
-            Notice notice = entitymanager.find(Notice.class, noticeid);
+            Notice notice = em.find(Notice.class, noticeid);
             if (notice == null) {
                 return false;
             }
-            entitymanager.remove(notice);
+            em.getTransaction().begin();
+            em.remove(notice);
+            em.getTransaction().commit();
             return true;
         } catch (Exception e) {
             e.printStackTrace();
             return false;
+        } finally {
+            em.close();
         }
-        
+
     }
 
     //获取用户的剩余邀请次数
-    public int GetUserAvailableInviteTimes(String userid){
+    public int GetUserAvailableInviteTimes(String userid) {
+        EntityManager em = getEntityManager();
         try {
-            JPAQuery<Integer> query = new JPAQuery<>(entitymanager);
+            JPAQuery<Integer> query = new JPAQuery<>(em);
             QUser u = QUser.user;
             int invite_left = query.select(u.invitetimes).from(u).where(u.userid.eq(userid)).fetchOne();
-            
+
             return invite_left;
         } catch (Exception e) {
             e.printStackTrace();
             return -1;
+        } finally {
+            em.close();
         }
-        
+
     }
 
     //邀请用户,返回状态:0 success,1 剩余次数不足,2,3其他原因
     @Override
-    public int InviteUser(String inviterid,String inviteemail){
+    public int InviteUser(String inviterid, String inviteemail) {
+        EntityManager em = getEntityManager();
         try {
-            User user = entitymanager.find(User.class, inviterid);
+            User user = em.find(User.class, inviterid);
             if (user == null || !user.email.equals(inviteemail)) {
                 return 3;
             }
@@ -317,158 +404,176 @@
                 return 1;
             }
             user.invitetimes -= 1;
-            entitymanager.merge(user);
+            em.getTransaction().begin();
+            em.merge(user);
+            em.getTransaction().commit();
             return 0;
         } catch (Exception e) {
             e.printStackTrace();
             return 2;
+        } finally {
+            em.close();
         }
-        
+
     }
 
     //添加一个收藏,返回状态:0 success,1 不存在,2其他原因
     @Override
-    public boolean AddCollect(String userid,String seedid){
-        JPAQuery<User> query2 = new JPAQuery<>(entitymanager);
-        QUser u2 = QUser.user;
-        User user = query2.select(u2).from(u2).where(u2.userid.eq(userid)).fetchOne();
-        if (user == null) {
-            return false;
-        }
-        JPAQuery<Seed> query3 = new JPAQuery<>(entitymanager);
-        QSeed p = QSeed.seed;
-        Seed seed = query3.select(p).from(p).where(p.seedid.eq(seedid)).fetchOne();
-        if (seed == null) {
-            return false;
-        }
-        JPAQuery<String> query = new JPAQuery<>(entitymanager);
-        QUserStar u = QUserStar.userStar;
-        List<String> allSeedId = query.select(u.seedid).from(u).where(u.userid.eq(userid)).fetch();
+    public boolean AddCollect(String userid, String seedid) {
+        EntityManager em = getEntityManager();
+        try {
+            JPAQuery<User> query2 = new JPAQuery<>(em);
+            QUser u2 = QUser.user;
+            User user = query2.select(u2).from(u2).where(u2.userid.eq(userid)).fetchOne();
+            if (user == null) {
+                return false;
+            }
+            JPAQuery<Seed> query3 = new JPAQuery<>(em);
+            QSeed p = QSeed.seed;
+            Seed seed = query3.select(p).from(p).where(p.seedid.eq(seedid)).fetchOne();
+            if (seed == null) {
+                return false;
+            }
+            JPAQuery<String> query = new JPAQuery<>(em);
+            QUserStar u = QUserStar.userStar;
+            List<String> allSeedId = query.select(u.seedid).from(u).where(u.userid.eq(userid)).fetch();
 
-        if (allSeedId.contains(seedid)) {
+            if (allSeedId.contains(seedid)) {
+                return false;
+            }
+            UserStar userStar = new UserStar();
+            userStar.userid = userid;
+            userStar.seedid = seedid;
+            em.getTransaction().begin();
+            em.persist(userStar);
+            em.getTransaction().commit();
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
             return false;
+        } finally {
+            em.close();
         }
-        UserStar userStar = new UserStar();
-        userStar.userid = userid;
-        userStar.seedid = seedid;
-        entitymanager.persist(userStar);
-        return true;
     }
 
     //删除一个收藏,返回状态:0 success,1 不存在,2其他原因
     @Override
-    public boolean DeleteCollect(String userid,String seedid){
+    public boolean DeleteCollect(String userid, String seedid) {
+        EntityManager em = getEntityManager();
         try {
-            JPAQuery<UserStar> query = new JPAQuery<>(entitymanager);
+            JPAQuery<UserStar> query = new JPAQuery<>(em);
             QUserStar u = QUserStar.userStar;
             UserStar userStar = query.select(u).from(u).where(u.userid.eq(userid).and(u.seedid.eq(seedid))).fetchOne();
             if (userStar == null) {
                 return true; // 收藏不存在
             }
-            entitymanager.remove(userStar);
+            em.getTransaction().begin();
+            em.remove(userStar);
+            em.getTransaction().commit();
             return true;
         } catch (Exception e) {
             e.printStackTrace();
             return false;
+        } finally {
+            em.close();
         }
-        
+
     }
 
     @Override
-    public int AddBegSeed(BegInfo info){
+    public int AddBegSeed(BegInfo info) {
         return 0;
     }
 
     @Override
-    public int UpdateBegSeed(BegInfo info){
+    public int UpdateBegSeed(BegInfo info) {
         return 0;
     }
 
     @Override
-    public int DeleteBegSeed(String begid){
+    public int DeleteBegSeed(String begid) {
         return 0;
     }
 
     @Override
-    public int VoteSeed(String begId, String seedId, String userId){
+    public int VoteSeed(String begId, String seedId, String userId) {
         return 0;
     }
 
     @Override
-    public int SubmitSeed(String begid,Seed seed){
+    public int SubmitSeed(String begid, Seed seed) {
         return 0;
     }
 
     @Override
-    public void SettleBeg(){
-        
+    public void SettleBeg() {
+
     }
 
     @Override
-    public int AddPost(Post post){
+    public int AddPost(Post post) {
         return 0;
     }
 
     @Override
-    public int UpdatePost(Post post){
+    public int UpdatePost(Post post) {
         return 0;
     }
 
     @Override
-    public int DeletePost(String postid){
+    public int DeletePost(String postid) {
         return 0;
     }
 
     @Override
-    public int AddComment(String postid, String userid, String comment){
+    public int AddComment(String postid, String userid, String comment) {
         return 0;
     }
 
     @Override
-    public int DeleteComment(String postid,String commentid){
+    public int DeleteComment(String postid, String commentid) {
         return 0;
     }
 
     @Override
-    public boolean ExchangeMagicToUpload(String userid,int magic)//将魔力值兑换为上传量,返回状态:0 success,1 不存在,2其他原因
+    public boolean ExchangeMagicToUpload(String userid, int magic)//将魔力值兑换为上传量,返回状态:0 success,1 不存在,2其他原因
     {
         return true;
     }
-    
+
     @Override
-    public boolean ExchangeMagicToDownload(String userid,int magic)
-    {
+    public boolean ExchangeMagicToDownload(String userid, int magic) {
         return true;
     }//将魔力值兑换为下载量,返回状态:0 success,1 不存在,2其他原因
 
     @Override
-    public boolean ExchangeMagicToVip(String userid,int magic){
+    public boolean ExchangeMagicToVip(String userid, int magic) {
         return true;
     }
     //将魔力值兑换为VIP次数,返回状态:0 success,1 不存在,2其他原因
 
     @Override
-    public boolean UploadTransmitProfile(Profile profile){
+    public boolean UploadTransmitProfile(Profile profile) {
         return true;
     }
 
     @Override
-    public Profile GetTransmitProfile(String profileid){
+    public Profile GetTransmitProfile(String profileid) {
         Profile profile = new Profile();
         return profile;
     }
     //获取迁移信息
-    
+
     @Override
-    public boolean ExamTransmitProfile(String profileid,boolean result){
+    public boolean ExamTransmitProfile(String profileid, boolean result) {
         return true;
     }
+
     //审核迁移信息,0成功,1失败
     @Override
-    public Profile[] GetTransmitProfileList(){
+    public Profile[] GetTransmitProfileList() {
         return new Profile[0];
     }
     //获取所有迁移信息
 
 }
-