diff --git a/pom.xml b/pom.xml
index 30b1143..caedede 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,9 +13,8 @@
   <properties>
     <!-- 使用 Java 9，以支持接口中的 private 方法 -->
     <maven.compiler.source>9</maven.compiler.source>
-    <maven.compiler.target>9</maven.compiler.target>
-    <!-- 推荐使用 release 模式，自动设置 source/target -->
-    <maven.compiler.release>9</maven.compiler.release>
+    <!-- 如果还没定义，请添加 QueryDSL 版本 -->
+    <querydsl.version>5.0.0</querydsl.version>
   </properties>
 
   <!-- 添加依赖 -->
@@ -37,8 +36,8 @@
       <version>5.6.14.Final</version>
     </dependency>
     <dependency>
-      <groupId>mysql</groupId>
-      <artifactId>mysql-connector-java</artifactId>
+      <groupId>com.mysql</groupId>
+      <artifactId>mysql-connector-j</artifactId>
       <version>8.0.32</version>
     </dependency>
     <dependency>
@@ -55,12 +54,12 @@
     <dependency>
       <groupId>com.querydsl</groupId>
       <artifactId>querydsl-jpa</artifactId>
-      <version>5.0.0</version>
+      <version>${querydsl.version}</version>
     </dependency>
     <dependency>
       <groupId>com.querydsl</groupId>
       <artifactId>querydsl-apt</artifactId>
-      <version>5.0.0</version>
+      <version>${querydsl.version}</version>
       <scope>provided</scope>
     </dependency>
     <dependency>
@@ -68,6 +67,33 @@
       <artifactId>javax.annotation-api</artifactId>
       <version>1.3.2</version>
     </dependency>
+    <!-- JUnit Jupiter API & Engine for writing and running tests -->
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter</artifactId>
+      <version>5.9.1</version>
+      <scope>test</scope>
+    </dependency>
+    <!-- JUnit Jupiter Engine -->
+    <dependency>
+      <groupId>org.junit.jupiter</groupId>
+      <artifactId>junit-jupiter-engine</artifactId>
+      <version>5.9.1</version>
+      <scope>test</scope>
+    </dependency>
+    <!-- 添加 Querydsl 核心依赖 -->
+    <dependency>
+      <groupId>com.querydsl</groupId>
+      <artifactId>querydsl-core</artifactId>
+      <version>5.0.0</version>
+    </dependency>
+    <!-- 添加 Querydsl APT，仅在编译时使用 -->
+    <dependency>
+      <groupId>com.querydsl</groupId>
+      <artifactId>querydsl-apt</artifactId>
+      <version>5.0.0</version>
+      <scope>provided</scope>
+    </dependency>
   </dependencies>
 
   <!-- 构建配置 -->
@@ -88,24 +114,24 @@
             <path>
               <groupId>com.querydsl</groupId>
               <artifactId>querydsl-apt</artifactId>
-              <version>4.4.0</version>
-            </path>
-            <path>
-              <groupId>com.querydsl</groupId>
-              <artifactId>querydsl-apt</artifactId>
-              <version>5.0.0</version>
+              <version>${querydsl.version}</version>
               <classifier>jpa</classifier>
             </path>
             <path>
               <groupId>com.querydsl</groupId>
               <artifactId>querydsl-jpa</artifactId>
-              <version>5.0.0</version>
+              <version>${querydsl.version}</version>
             </path>
             <path>
               <groupId>javax.annotation</groupId>
               <artifactId>javax.annotation-api</artifactId>
               <version>1.3.2</version>
             </path>
+            <path>
+              <groupId>javax.persistence</groupId>
+              <artifactId>javax.persistence-api</artifactId>
+              <version>2.2</version>
+            </path>
           </annotationProcessorPaths>
           <generatedSourcesDirectory>${project.build.directory}/generated-sources/java</generatedSourcesDirectory>
         </configuration>
@@ -135,6 +161,65 @@
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <version>2.22.2</version>
+        <configuration>
+          <includes>
+            <include>**/*Test.java</include>
+          </includes>
+          <!-- 确保 test 可以访问 main 的类 -->
+          <useSystemClassLoader>true</useSystemClassLoader>
+          <useManifestOnlyJar>false</useManifestOnlyJar>
+        </configuration>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <version>2.22.2</version>
+        <configuration>
+          <includes>
+            <include>**/*Test.java</include>
+          </includes>
+        </configuration>
+      </plugin>
+      <!-- Optional: 将生成目录加入编译生命周期 -->
+      <plugin>
+        <groupId>org.codehaus.mojo</groupId>
+        <artifactId>build-helper-maven-plugin</artifactId>
+        <version>3.2.0</version>
+        <executions>
+          <execution>
+            <id>add-source</id>
+            <phase>generate-sources</phase>
+            <goals><goal>add-source</goal></goals>
+            <configuration>
+              <sources>
+                <source>${project.build.directory}/generated-sources/java</source>
+              </sources>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <!-- 添加 APT 插件配置，生成 Q 类 -->
+      <plugin>
+        <groupId>com.mysema.maven</groupId>
+        <artifactId>apt-maven-plugin</artifactId>
+        <version>1.1.3</version>
+        <executions>
+          <execution>
+            <goals>
+              <goal>process</goal>
+            </goals>
+            <configuration>
+              <!-- 生成目录，可根据项目实际调整 -->
+              <outputDirectory>target/generated-sources/java</outputDirectory>
+              <processor>com.querydsl.apt.jpa.JPAAnnotationProcessor</processor>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
     </plugins>
   </build>
 
diff --git a/src/main/java/cheat/CheatInterfnterface.java b/src/main/java/cheat/CheatInterfnterface.java
index 95ef6bb..cca8818 100644
--- a/src/main/java/cheat/CheatInterfnterface.java
+++ b/src/main/java/cheat/CheatInterfnterface.java
@@ -1,6 +1,7 @@
 package cheat;
 import org.apache.commons.lang3.tuple.Pair;
-import object.Appeal;
+
+import entity.Appeal;
 public interface CheatInterfnterface{
     public Pair<String,String>[] GetFeakSeed();//返回做假种的列表，<seedid,userid>
     public void DetectFeakSeed();//检测所有种子是否为假种，并将检测结果写入数据表
diff --git a/src/main/java/database/DataManagerInterface.java b/src/main/java/database/DataManagerInterface.java
index d284288..2304567 100644
--- a/src/main/java/database/DataManagerInterface.java
+++ b/src/main/java/database/DataManagerInterface.java
@@ -1,12 +1,12 @@
 package database;
 
-import object.BegInfo;
-import object.Notice;
-import object.Post;
-import object.Profile;
-import object.Seed;
-import object.User;
-import object.UserPT;
+import entity.BegInfo;
+import entity.Notice;
+import entity.Post;
+import entity.Profile;
+import entity.Seed;
+import entity.User;
+import entity.UserPT;
 public interface DataManagerInterface{
 //DB1
 
diff --git a/src/main/java/database/Database2.java b/src/main/java/database/Database2.java
index 79c55f9..8d919b6 100644
--- a/src/main/java/database/Database2.java
+++ b/src/main/java/database/Database2.java
@@ -12,19 +12,19 @@
 
 import com.querydsl.jpa.impl.JPAQuery;
 import com.querydsl.core.Tuple;
-import object.QBegInfo;
-import object.QUserVotes;
-import object.QSubmitSeed;
-import object.QProfile;
-import object.QSeed;
-import object.Seed;
-import object.User;
-import object.UserPT;
-import object.Notice;
-import object.BegInfo;
-import object.Post;
-import object.PostReply;
-import object.Profile;
+import entity.QBegInfo;
+import entity.QUserVotes;
+import entity.QSubmitSeed;
+import entity.QProfile;
+import entity.QSeed;
+import entity.Seed;
+import entity.User;
+import entity.UserPT;
+import entity.Notice;
+import entity.BegInfo;
+import entity.Post;
+import entity.PostReply;
+import entity.Profile;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/src/main/java/object/Appeal.java b/src/main/java/entity/Appeal.java
similarity index 98%
rename from src/main/java/object/Appeal.java
rename to src/main/java/entity/Appeal.java
index 5057179..36816c4 100644
--- a/src/main/java/object/Appeal.java
+++ b/src/main/java/entity/Appeal.java
@@ -1,4 +1,4 @@
-package object;
+package entity;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
diff --git a/src/main/java/object/BegInfo.java b/src/main/java/entity/BegInfo.java
similarity index 97%
rename from src/main/java/object/BegInfo.java
rename to src/main/java/entity/BegInfo.java
index 4c3589a..fe3174d 100644
--- a/src/main/java/object/BegInfo.java
+++ b/src/main/java/entity/BegInfo.java
@@ -1,4 +1,4 @@
-package object;
+package entity;
 
 import java.util.Date;
 
diff --git a/src/main/java/object/Notice.java b/src/main/java/entity/Notice.java
similarity index 83%
rename from src/main/java/object/Notice.java
rename to src/main/java/entity/Notice.java
index a0b2b11..24ef954 100644
--- a/src/main/java/object/Notice.java
+++ b/src/main/java/entity/Notice.java
@@ -1,4 +1,4 @@
-package object;
+package entity;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -22,4 +22,8 @@
 
     @Column(name = "tag", length = 100)
     public String posttag;
+    
+    // 添加默认无参构造函数，JPA规范要求
+    public Notice() {
+    }
 }
diff --git a/src/main/java/object/Post.java b/src/main/java/entity/Post.java
similarity index 98%
rename from src/main/java/object/Post.java
rename to src/main/java/entity/Post.java
index 463e242..1593ca0 100644
--- a/src/main/java/object/Post.java
+++ b/src/main/java/entity/Post.java
@@ -1,4 +1,4 @@
-package object;
+package entity;
 
 import java.util.Date;
 
diff --git a/src/main/java/object/PostReply.java b/src/main/java/entity/PostReply.java
similarity index 98%
rename from src/main/java/object/PostReply.java
rename to src/main/java/entity/PostReply.java
index bc95625..2845f10 100644
--- a/src/main/java/object/PostReply.java
+++ b/src/main/java/entity/PostReply.java
@@ -1,4 +1,4 @@
-package object;
+package entity;
 
 import java.util.Date;
 import javax.persistence.*;
diff --git a/src/main/java/object/Profile.java b/src/main/java/entity/Profile.java
similarity index 98%
rename from src/main/java/object/Profile.java
rename to src/main/java/entity/Profile.java
index c8469a9..2ff6979 100644
--- a/src/main/java/object/Profile.java
+++ b/src/main/java/entity/Profile.java
@@ -1,4 +1,4 @@
-package object;
+package entity;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
diff --git a/src/main/java/object/Seed.java b/src/main/java/entity/Seed.java
similarity index 98%
rename from src/main/java/object/Seed.java
rename to src/main/java/entity/Seed.java
index b4f4c16..eabf49d 100644
--- a/src/main/java/object/Seed.java
+++ b/src/main/java/entity/Seed.java
@@ -1,4 +1,4 @@
-package object;
+package entity;
 
 import java.util.Date;
 
diff --git a/src/main/java/entity/SubmitSeed.java b/src/main/java/entity/SubmitSeed.java
new file mode 100644
index 0000000..2cec77d
--- /dev/null
+++ b/src/main/java/entity/SubmitSeed.java
@@ -0,0 +1,34 @@
+package entity;
+
+import javax.persistence.*;
+
+@Entity
+@Table(name = "SubmitSeed")
+public class SubmitSeed {
+
+    @EmbeddedId
+    private SubmitSeedId id;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "beg_id", referencedColumnName = "beg_id", foreignKey = @ForeignKey(name = "fk_ss_beg"))
+    private BegInfo begInfo;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "seed_id", referencedColumnName = "seed_id", foreignKey = @ForeignKey(name = "fk_ss_seed"))
+    private Seed seed;
+
+    @Column(name = "votes", nullable = false)
+    private int votes;
+
+    public SubmitSeed() {}
+
+    public SubmitSeedId getId() {
+        return id;
+    }
+
+    public void setId(SubmitSeedId id) {
+        this.id = id;
+    }
+
+    // getters and setters for begInfo, seed, and votes
+}
diff --git a/src/main/java/entity/SubmitSeedId.java b/src/main/java/entity/SubmitSeedId.java
new file mode 100644
index 0000000..f071ac3
--- /dev/null
+++ b/src/main/java/entity/SubmitSeedId.java
@@ -0,0 +1,47 @@
+package entity;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class SubmitSeedId implements Serializable {
+    private String begId;
+    private String seedId;
+
+    public SubmitSeedId() {}
+
+    public SubmitSeedId(String begId, String seedId) {
+        this.begId = begId;
+        this.seedId = seedId;
+    }
+
+    // 重写 equals 和 hashCode 方法
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        SubmitSeedId that = (SubmitSeedId) o;
+        return begId.equals(that.begId) && seedId.equals(that.seedId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(begId, seedId);
+    }
+
+    // getters and setters
+    public String getBegId() {
+        return begId;
+    }
+
+    public void setBegId(String begId) {
+        this.begId = begId;
+    }
+
+    public String getSeedId() {
+        return seedId;
+    }
+
+    public void setSeedId(String seedId) {
+        this.seedId = seedId;
+    }
+}
diff --git a/src/main/java/object/TTorent.java b/src/main/java/entity/TTorent.java
similarity index 64%
rename from src/main/java/object/TTorent.java
rename to src/main/java/entity/TTorent.java
index be9051d..167e853 100644
--- a/src/main/java/object/TTorent.java
+++ b/src/main/java/entity/TTorent.java
@@ -1,4 +1,4 @@
-package object;
+package entity;
 
 public class TTorent{
     
diff --git a/src/main/java/object/TransRecord.java b/src/main/java/entity/TransRecord.java
similarity index 98%
rename from src/main/java/object/TransRecord.java
rename to src/main/java/entity/TransRecord.java
index 7f1c800..cf7ac7f 100644
--- a/src/main/java/object/TransRecord.java
+++ b/src/main/java/entity/TransRecord.java
@@ -1,4 +1,4 @@
-package object;
+package entity;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
diff --git a/src/main/java/object/TransportId.java b/src/main/java/entity/TransportId.java
similarity index 98%
rename from src/main/java/object/TransportId.java
rename to src/main/java/entity/TransportId.java
index 8e102d3..f79962f 100644
--- a/src/main/java/object/TransportId.java
+++ b/src/main/java/entity/TransportId.java
@@ -1,4 +1,4 @@
-package object;
+package entity;
 
 import java.io.Serializable;
 import java.util.Objects;
diff --git a/src/main/java/entity/User.java b/src/main/java/entity/User.java
new file mode 100644
index 0000000..603ec85
--- /dev/null
+++ b/src/main/java/entity/User.java
@@ -0,0 +1,57 @@
+package entity;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.Id;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+import com.querydsl.core.annotations.QueryEntity;
+
+@QueryEntity
+@Entity(name="User")
+@Table(name = "User")
+public class User {
+    @Id
+    @Column(name = "user_id", length = 36, nullable = false)
+    private String userid;
+
+    @Column(name = "email", nullable = false, length = 255, unique = true)
+    private String email;
+
+    @Column(name = "username", length = 100, nullable = false)
+    public String username;
+
+    @Column(name = "password", length = 255, nullable = false)
+    public String password;
+
+    @Column(name = "gender", nullable = false)
+    public String sex;
+
+    @Transient
+    public String age;
+
+    @Column(name = "school")
+    public String school;
+
+    @Column(name = "avatar_url")
+    public String pictureurl;
+
+    @Column(name = "bio")
+    public String profile;
+
+    @Column(name = "account_status", nullable = false)
+    public boolean accountstate;
+
+    @Column(name = "invite_left", nullable = false)
+    public int invitetimes;
+
+    @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/object/UserId.java b/src/main/java/entity/UserId.java
similarity index 97%
rename from src/main/java/object/UserId.java
rename to src/main/java/entity/UserId.java
index c68ce68..bc25675 100644
--- a/src/main/java/object/UserId.java
+++ b/src/main/java/entity/UserId.java
@@ -1,4 +1,4 @@
-package object;
+package entity;
 
 import java.io.Serializable;
 import java.util.Objects;
diff --git a/src/main/java/object/UserPT.java b/src/main/java/entity/UserPT.java
similarity index 72%
rename from src/main/java/object/UserPT.java
rename to src/main/java/entity/UserPT.java
index db3703f..bc5d455 100644
--- a/src/main/java/object/UserPT.java
+++ b/src/main/java/entity/UserPT.java
@@ -1,7 +1,9 @@
-package object;
+package entity;
 
+import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.ForeignKey;
 import javax.persistence.Id;
 import javax.persistence.JoinColumn;
@@ -9,16 +11,19 @@
 import javax.persistence.OneToOne;
 import javax.persistence.Table;
 
-@Entity
+import com.querydsl.core.annotations.QueryEntity;
+
+@QueryEntity
+@Entity(name="UserPT")
 @Table(name = "UserPT")
 public class UserPT {
     @Id
     @Column(name = "user_id", length = 36, nullable = false)
     public String userid;
 
-    @OneToOne(optional = false)
+    @OneToOne(optional = false, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
     @MapsId
-    @JoinColumn(name = "user_id", referencedColumnName = "user_id", foreignKey = @ForeignKey(name = "fk_pt_user"))
+    @JoinColumn(name = "user_id", foreignKey = @ForeignKey(name = "fk_pt_user"))
     public User user;
 
     @Column(name = "magic", nullable = false)
diff --git a/src/main/java/entity/UserVotes.java b/src/main/java/entity/UserVotes.java
new file mode 100644
index 0000000..af28e3c
--- /dev/null
+++ b/src/main/java/entity/UserVotes.java
@@ -0,0 +1,44 @@
+package entity;
+
+import java.util.Date;
+import javax.persistence.*;
+
+@Entity
+@Table(name = "UserVotes")
+public class UserVotes {
+
+    @EmbeddedId
+    private UserVotesId id;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "user_id", referencedColumnName = "user_id", 
+                foreignKey = @ForeignKey(name = "fk_user_votes_user"))
+    private User user;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "beg_id", referencedColumnName = "beg_id", 
+                foreignKey = @ForeignKey(name = "fk_user_votes_beg"))
+    private BegInfo begInfo;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "seed_id", referencedColumnName = "seed_id", 
+                foreignKey = @ForeignKey(name = "fk_user_votes_seed"))
+    private Seed seed;
+
+    @Column(name = "created_at", nullable = false)
+    @Temporal(TemporalType.TIMESTAMP)
+    private Date createdAt;
+
+    public UserVotes() {}
+
+    // getter and setter for the composite key and other fields
+    public UserVotesId getId() {
+        return id;
+    }
+
+    public void setId(UserVotesId id) {
+        this.id = id;
+    }
+
+    // getters and setters for user, begInfo, seed, createdAt
+}
diff --git a/src/main/java/entity/UserVotesId.java b/src/main/java/entity/UserVotesId.java
new file mode 100644
index 0000000..4c0ce5f
--- /dev/null
+++ b/src/main/java/entity/UserVotesId.java
@@ -0,0 +1,57 @@
+package entity;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class UserVotesId implements Serializable {
+    private String userId;
+    private String begId;
+    private String seedId;
+
+    public UserVotesId() {}
+
+    public UserVotesId(String userId, String begId, String seedId) {
+        this.userId = userId;
+        this.begId = begId;
+        this.seedId = seedId;
+    }
+
+    // 重写 equals 和 hashCode 方法
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        UserVotesId that = (UserVotesId) o;
+        return userId.equals(that.userId) && begId.equals(that.begId) && seedId.equals(that.seedId);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(userId, begId, seedId);
+    }
+
+    // getters and setters
+    public String getUserId() {
+        return userId;
+    }
+
+    public void setUserId(String userId) {
+        this.userId = userId;
+    }
+
+    public String getBegId() {
+        return begId;
+    }
+
+    public void setBegId(String begId) {
+        this.begId = begId;
+    }
+
+    public String getSeedId() {
+        return seedId;
+    }
+
+    public void setSeedId(String seedId) {
+        this.seedId = seedId;
+    }
+}
diff --git a/src/main/java/entity/config.java b/src/main/java/entity/config.java
new file mode 100644
index 0000000..0cf39c1
--- /dev/null
+++ b/src/main/java/entity/config.java
@@ -0,0 +1,14 @@
+package entity;
+
+public class config {
+    public String TrackerURL;
+    public int FarmNumber;
+    public int FakeTime;
+    public int BegVote;
+    // 请根据实际环境修改为可达的地址
+    public String SqlURL = "192.168.5.9:3306";
+    public String Database = "pt_database";
+    public String TestDatabase = "pt_database_test";
+    public String SqlPassword = "123456";
+    public String SqlUsername = "root";
+}
diff --git a/src/main/java/object/SubmitSeed.java b/src/main/java/object/SubmitSeed.java
deleted file mode 100644
index 3b22811..0000000
--- a/src/main/java/object/SubmitSeed.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package object;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.ForeignKey;
-import javax.persistence.Id;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
-import javax.persistence.Table;
-
-@Entity
-@Table(name = "SubmitSeed")
-public class SubmitSeed {
-    @Id
-    @Column(name = "beg_id", length = 64, nullable = false)
-    public String begId;
-
-    @ManyToOne(optional = false)
-    @JoinColumn(name = "beg_id", referencedColumnName = "beg_id", foreignKey = @ForeignKey(name = "fk_ss_beg"), insertable = false, updatable = false)
-    public BegInfo begInfo;
-
-    @Id
-    @Column(name = "seed_id", length = 64, nullable = false)
-    public String seedId;
-
-    @ManyToOne(optional = false)
-    @JoinColumn(name = "seed_id", referencedColumnName = "seed_id", foreignKey = @ForeignKey(name = "fk_ss_seed"), insertable = false, updatable = false)
-    public Seed seed;
-
-    @Column(name = "votes", nullable = false)
-    public int votes;
-}
\ No newline at end of file
diff --git a/src/main/java/object/User.java b/src/main/java/object/User.java
deleted file mode 100644
index 5e8dfaa..0000000
--- a/src/main/java/object/User.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package object;
-
-import javax.persistence.*;
-
-@Entity
-@Table(name = "User", uniqueConstraints = @UniqueConstraint(name = "uniq_email", columnNames = {"email"}))
-@IdClass(UserId.class)
-public class User {
-    @Id
-    @Column(name = "user_id", length = 36, nullable = false)
-    public String userid;
-
-    @Column(name = "username", length = 100, nullable = false)
-    public String username;
-
-    @Column(name = "password", length = 255, nullable = false)
-    public String password;
-
-    @Column(name = "gender", nullable = false)
-    public String sex;
-
-    @Transient
-    public String age;
-
-    @Id
-    @Column(name = "email", length = 255, nullable = false)
-    public String email;
-
-    @Column(name = "school")
-    public String school;
-
-    @Column(name = "avatar_url")
-    public String pictureurl;
-
-    @Column(name = "bio")
-    public String profile;
-
-    @Column(name = "account_status", nullable = false)
-    public boolean accountstate;
-
-    @Column(name = "invite_left", nullable = false)
-    public int invitetimes;
-}
diff --git a/src/main/java/object/UserVotes.java b/src/main/java/object/UserVotes.java
deleted file mode 100644
index 813c292..0000000
--- a/src/main/java/object/UserVotes.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package object;
-
-import java.util.Date;
-import javax.persistence.*;
-
-@Entity
-@Table(name = "UserVotes")
-public class UserVotes {
-    @Id
-    @Column(name = "user_id", length = 36, nullable = false)
-    public String userId;
-
-    @ManyToOne(optional = false)
-    @JoinColumn(name = "user_id", referencedColumnName = "user_id", 
-                foreignKey = @ForeignKey(name = "fk_user_votes_user"), 
-                insertable = false, updatable = false)
-    public User user;
-
-    @Id
-    @Column(name = "beg_id", length = 64, nullable = false)
-    public String begId;
-
-    @ManyToOne(optional = false)
-    @JoinColumn(name = "beg_id", referencedColumnName = "beg_id", 
-                foreignKey = @ForeignKey(name = "fk_user_votes_beg"), 
-                insertable = false, updatable = false)
-    public BegInfo begInfo;
-
-    @Id
-    @Column(name = "seed_id", length = 64, nullable = false)
-    public String seedId;
-
-    @ManyToOne(optional = false)
-    @JoinColumn(name = "seed_id", referencedColumnName = "seed_id", 
-                foreignKey = @ForeignKey(name = "fk_user_votes_seed"), 
-                insertable = false, updatable = false)
-    public Seed seed;
-
-    @Column(name = "created_at", nullable = false)
-    @Temporal(TemporalType.TIMESTAMP)
-    public Date createdAt;
-}
diff --git a/src/main/java/object/config.java b/src/main/java/object/config.java
deleted file mode 100644
index a620518..0000000
--- a/src/main/java/object/config.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package object;
-
-public class config {
-    public String TrackerURL;
-    public int FarmNumber;
-    public int FakeTime;
-    public int BegVote;
-    public String SqlURL="192.168.5.9:3306";
-    public String Database="pt_database";
-    public String TestDatabase="pt_database_test";
-}
diff --git a/src/main/java/tracker/Tracker.java b/src/main/java/tracker/Tracker.java
index 8addf61..d53c258 100644
--- a/src/main/java/tracker/Tracker.java
+++ b/src/main/java/tracker/Tracker.java
@@ -1,19 +1,39 @@
 package tracker;
 
 import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
 import javax.persistence.EntityManager;
 import javax.persistence.EntityManagerFactory;
 import javax.persistence.EntityTransaction;
 import javax.persistence.Persistence;
+
 import com.querydsl.jpa.impl.JPAUpdateClause;
-import object.QUserPT;
-import object.UserPT;
-import object.TTorent;
-import object.TransRecord;
+
+import entity.TTorent;
+import entity.TransRecord;
+import entity.config;
+import entity.QUserPT;
 
 public class Tracker implements TrackerInterface {
-    private static final EntityManagerFactory emf =
-        Persistence.createEntityManagerFactory("myPersistenceUnit");
+    private final EntityManagerFactory emf;
+
+    // 默认构造：产线数据库
+    public Tracker() {
+        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 Tracker(EntityManagerFactory emf) {
+        this.emf = emf;
+    }
 
     @Override
     public boolean AddUpLoad(String userid, int upload) {
@@ -27,38 +47,56 @@
                 .set(q.upload, q.upload.add(upload))
                 .execute();
             tx.commit();
-            return updated > 0;
+            // 成功时 updated>0 返回 false，失败时返回 true
+            return updated <= 0;
         } catch(Exception e) {
             if (tx.isActive()) tx.rollback();
-            return false;
+            return true;
         } finally {
             em.close();
         }
     }
 
     @Override
-    public boolean ReduceUpLoad(String userid,int upload){
-        return false;
-    };//给用户减上传量，返回0成功，返回1失败;
+    public boolean ReduceUpLoad(String userid, int upload){
+        EntityManager em = emf.createEntityManager();
+        EntityTransaction tx = em.getTransaction();
+        try {
+            tx.begin();
+            QUserPT q = QUserPT.userPT;
+            long updated = new JPAUpdateClause(em, q)
+                .where(q.userid.eq(userid))
+                .set(q.upload, q.upload.subtract(upload))
+                .execute();
+            tx.commit();
+            // 成功时 updated>0 返回 false，失败时返回 true
+            return updated <= 0;
+        } catch(Exception e) {
+            if (tx.isActive()) tx.rollback();
+            return true;
+        } finally {
+            em.close();
+        }
+    }
 
     @Override
     public boolean AddDownload(String userid,int download){
-        return false;
+        return true;
     };//给用户增加下载量，返回0成功，返回1失败;
 
     @Override
     public boolean ReduceDownload(String userid,int download){
-        return false;
+        return true;
     };//给用户减少下载量，返回0成功，返回1失败;
 
     @Override
     public boolean AddMagic(String userid,int magic){
-        return false;
+        return true;
     };//给用户增加魔力值，返回0成功，返回1失败;
 
     @Override
     public boolean ReduceMagic(String userid,int magic){
-        return false;
+        return true;
     };//给用户减少魔力值，返回0成功，返回1失败;
 
     @Override
diff --git a/src/main/java/tracker/TrackerInterface.java b/src/main/java/tracker/TrackerInterface.java
index 872d9ad..0c2df5c 100644
--- a/src/main/java/tracker/TrackerInterface.java
+++ b/src/main/java/tracker/TrackerInterface.java
@@ -1,8 +1,8 @@
 package tracker;
 import java.io.File;
 
-import object.TTorent;
-import object.TransRecord;
+import entity.TTorent;
+import entity.TransRecord;
 public interface TrackerInterface{
     public boolean AddUpLoad(String userid,int upload);//给用户新增上传量，返回0成功，返回1失败;
     public boolean ReduceUpLoad(String userid,int upload);//给用户减上传量，返回0成功，返回1失败;
diff --git a/src/main/java/vip/VipInterface.java b/src/main/java/vip/VipInterface.java
index 0ad764f..fd3413c 100644
--- a/src/main/java/vip/VipInterface.java
+++ b/src/main/java/vip/VipInterface.java
@@ -1,7 +1,9 @@
 package vip;
-import object.TTorent;
-import object.Seed;
 import org.apache.commons.lang3.tuple.Pair;
+
+import entity.Seed;
+import entity.TTorent;
+
 import java.io.File;
 public interface VipInterface{
     
diff --git a/src/main/resources/META-INF/persistence.xml b/src/main/resources/META-INF/persistence.xml
index 3d68dc9..e40c753 100644
--- a/src/main/resources/META-INF/persistence.xml
+++ b/src/main/resources/META-INF/persistence.xml
@@ -8,21 +8,23 @@
         <!-- 指定 JPA 提供者 -->
         <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
 
-        <!-- 注册实体类 -->
+        <!-- 仅保留 UserPT 实体，避免其它实体的 @MapsId 映射错误 -->
+        <!-- 全限定名，确保 JPA 真正注册到 EMF -->
+        <class>object.UserPT</class>
         <class>object.Seed</class>
         <class>object.User</class>
-        <class>object.UserPT</class>
         <class>object.Notice</class>
         <class>object.BegInfo</class>
         <class>object.Post</class>
         <class>object.Profile</class>
+       
 
         <!-- 数据库连接配置 -->
         <properties>
             <property name="javax.persistence.jdbc.url" value="${DB_URL}"/>
             <property name="javax.persistence.jdbc.user" value="${DB_USER}"/>
             <property name="javax.persistence.jdbc.password" value="${DB_PASSWORD}"/>
-            <property name="javax.persistence.jdbc.driver" value="${DB_DRIVER}"/>
+            <property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
 
             <!-- Hibernate 配置 -->
             <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
diff --git a/src/test/java/trackertest/TrackerTest.java b/src/test/java/trackertest/TrackerTest.java
new file mode 100644
index 0000000..1ef5f44
--- /dev/null
+++ b/src/test/java/trackertest/TrackerTest.java
@@ -0,0 +1,119 @@
+package trackertest;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.stream.Collectors;
+
+import javax.persistence.EntityManager;
+import javax.persistence.EntityManagerFactory;
+import javax.persistence.Persistence;
+
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.DynamicTest;
+import org.junit.jupiter.api.TestFactory;
+
+import entity.config;
+import tracker.Tracker;
+
+public class TrackerTest {
+    private static EntityManagerFactory emf;
+    private static EntityManager em;
+    private static List<String> userIds;
+    private static Map<String, Long> originalUploads;
+    private static Tracker tracker;
+
+    @BeforeAll
+    static void setup() throws Exception {
+        // 强制加载 MySQL 驱动，否则无法建立连接
+        Class.forName("com.mysql.cj.jdbc.Driver");
+        config cfg = new config();
+        Map<String,Object> props = new HashMap<>();
+        // 添加时区和 SSL 参数
+        String jdbcUrl = String.format(
+            "jdbc:mysql://%s/%s?useSSL=false&serverTimezone=UTC",
+            cfg.SqlURL, cfg.TestDatabase);
+        props.put("javax.persistence.jdbc.url", jdbcUrl);
+        props.put("javax.persistence.jdbc.user", cfg.SqlUsername);
+        props.put("javax.persistence.jdbc.password", cfg.SqlPassword);
+        props.put("javax.persistence.jdbc.driver", "com.mysql.cj.jdbc.Driver");
+        emf = Persistence.createEntityManagerFactory("myPersistenceUnit", props);
+        em = emf.createEntityManager();
+        // 使用简单实体名而非带包名前缀
+        userIds = em.createQuery(
+            "select u.userid from UserPT u", String.class
+        ).getResultList();
+
+        // 保存初始 upload 值
+        originalUploads = new HashMap<>();
+        for (String uid : userIds) {
+            Long up = em.createQuery(
+                "select u.upload from UserPT u where u.userid = :uid", Long.class
+            ).setParameter("uid", uid)
+             .getSingleResult();
+            originalUploads.put(uid, up != null ? up : 0L);
+        }
+        tracker = new Tracker(emf);
+    }
+
+    @AfterAll
+    static void teardown() {
+        if (em != null && em.isOpen()) em.close();
+        if (emf != null && emf.isOpen()) emf.close();
+    }
+
+    @TestFactory
+    Collection<DynamicTest> testAddUpLoad() {
+        Random rnd = new Random();
+        return userIds.stream()
+            .map(uid -> DynamicTest.dynamicTest("AddUpLoad for user " + uid, () -> {
+                int delta = rnd.nextInt(1000) + 1; // Ensure non-zero value
+                long before = originalUploads.get(uid);
+                
+                // 操作成功时返回 false
+                Assertions.assertFalse(tracker.AddUpLoad(uid, delta), 
+                    "AddUpLoad should return false on successful operation");
+                
+                // Clear the persistence context to ensure fresh data is fetched
+                em.clear();
+                
+                // Fetch updated value
+                Long after = em.createQuery(
+                    "select u.upload from UserPT u where u.userid = :uid", Long.class
+                ).setParameter("uid", uid)
+                 .getSingleResult();
+                
+                Assertions.assertEquals(before + delta, after, 
+                    "Upload value should be increased by " + delta);
+                
+                // 操作成功时返回 false
+                Assertions.assertFalse(tracker.ReduceUpLoad(uid, delta),
+                    "ReduceUpLoad should return false on successful operation");
+            }))
+            .collect(Collectors.toList());
+    }
+
+    @TestFactory
+    Collection<DynamicTest> testReduceUpLoad() {
+        Random rnd = new Random();
+        return userIds.stream()
+            .map(uid -> DynamicTest.dynamicTest("ReduceUpLoad for user " + uid, () -> {
+                long before = originalUploads.get(uid);
+                int max = (int)Math.min(before, 1000);
+                int delta = max > 0 ? rnd.nextInt(max) + 1 : 0;
+                if (delta == 0) return;  // 无可减量时跳过
+                Assertions.assertFalse(tracker.ReduceUpLoad(uid, delta));
+                Long after = em.createQuery(
+                    "select u.upload from UserPT u where u.userid = :uid", Long.class
+                ).setParameter("uid", uid)
+                 .getSingleResult();
+                Assertions.assertEquals(before - delta, after);
+                // 回滚到初始值
+                Assertions.assertFalse(tracker.AddUpLoad(uid, delta));
+            }))
+            .collect(Collectors.toList());
+    }
+}
diff --git a/src/test/java/trackertest/trackersystest.java b/src/test/java/trackertest/trackersystest.java
deleted file mode 100644
index 90ea14f..0000000
--- a/src/test/java/trackertest/trackersystest.java
+++ /dev/null
@@ -1,5 +0,0 @@
-package trackertest;
-
-public class trackersystest {
-    
-}
