diff --git a/src/main/java/cheat/Cheat.java b/src/main/java/cheat/Cheat.java
index 1141c5b..5ca7c04 100644
--- a/src/main/java/cheat/Cheat.java
+++ b/src/main/java/cheat/Cheat.java
@@ -418,17 +418,30 @@
     @Override
     public void PunishUser(){
         EntityManager entityManager = emf.createEntityManager();
-        JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
-        entity.QUser qUser = entity.QUser.user;
-        List<User> users = queryFactory
-            .selectFrom(qUser)
-            .where(qUser.detectedCount.gt(config.getCheatTime()) 
-                .or(qUser.fakeDetectedCount.gt(config.getFakeTime())))
-            .fetch();
-
-        for (User user : users) {
-            user.accountstate = true;
-            entityManager.merge(user);
+        try {
+            JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager);
+            entity.QUser qUser = entity.QUser.user;
+            List<User> users = queryFactory
+                .selectFrom(qUser)
+                .where(qUser.detectedCount.gt(config.getCheatTime()) 
+                    .or(qUser.fakeDetectedCount.gt(config.getFakeTime())))
+                .fetch();
+            if (users.isEmpty()) {
+                System.out.println("No users to punish.");
+                return;
+            }
+            entityManager.getTransaction().begin();
+            for (User user : users) {
+                user.accountstate = true;
+                entityManager.merge(user);
+            }
+            entityManager.getTransaction().commit();
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            if (entityManager != null) {
+                entityManager.close();
+            }
         }
     }
 
