diff --git a/src/main/java/entity/Appeal.java b/src/main/java/entity/Appeal.java
new file mode 100644
index 0000000..36816c4
--- /dev/null
+++ b/src/main/java/entity/Appeal.java
@@ -0,0 +1,35 @@
+package entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.ForeignKey;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "Appeal")
+public class Appeal {
+    @Id
+    @Column(name = "appeal_id", length = 64, nullable = false)
+    public String appealid;
+
+    @Column(name = "user_id", length = 36, nullable = false)
+    public String appealuserid;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "user_id", referencedColumnName = "user_id", foreignKey = @ForeignKey(name = "fk_appeal_user"), insertable = false, updatable = false)
+    public User user;
+
+    @Lob
+    @Column(name = "content", nullable = false)
+    public String content;
+
+    @Column(name = "file_url", length = 255)
+    public String fileURL;
+
+    @Column(name = "status", nullable = false)
+    public int state; // 0: pending, 1: approved, 2: rejected
+}
diff --git a/src/main/java/entity/BegInfo.java b/src/main/java/entity/BegInfo.java
new file mode 100644
index 0000000..fe3174d
--- /dev/null
+++ b/src/main/java/entity/BegInfo.java
@@ -0,0 +1,31 @@
+package entity;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@Entity
+@Table(name = "BegSeed")
+public class BegInfo {
+    @Id
+    @Column(name = "beg_id", length = 64, nullable = false)
+    public String begid;
+
+    @Column(name = "beg_count", nullable = false)
+    public int begnumbers;
+
+    @Column(name = "reward_magic", nullable = false)
+    public int magic;
+
+    @Column(name = "deadline", nullable = false)
+    @Temporal(TemporalType.TIMESTAMP)
+    public Date endtime;
+
+    @Column(name = "has_match", nullable = false)
+    public boolean hasseed;
+}
diff --git a/src/main/java/entity/Notice.java b/src/main/java/entity/Notice.java
new file mode 100644
index 0000000..24ef954
--- /dev/null
+++ b/src/main/java/entity/Notice.java
@@ -0,0 +1,29 @@
+package entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Lob;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "Announcement")
+public class Notice {
+    @Id
+    @Column(name = "announce_id", length = 64, nullable = false)
+    public String noticeid;
+
+    @Lob
+    @Column(name = "content", nullable = false)
+    public String noticecontent;
+
+    @Column(name = "is_public", nullable = false)
+    public boolean state;
+
+    @Column(name = "tag", length = 100)
+    public String posttag;
+    
+    // 添加默认无参构造函数，JPA规范要求
+    public Notice() {
+    }
+}
diff --git a/src/main/java/entity/Post.java b/src/main/java/entity/Post.java
new file mode 100644
index 0000000..1593ca0
--- /dev/null
+++ b/src/main/java/entity/Post.java
@@ -0,0 +1,46 @@
+package entity;
+
+import java.util.Date;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.ForeignKey;
+import javax.persistence.Id;
+import javax.persistence.JoinColumn;
+import javax.persistence.Lob;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@Entity
+@Table(name = "Post")
+public class Post {
+    @Id
+    @Column(name = "post_id", length = 64, nullable = false)
+    public String postid;
+
+    @Column(name = "title", length = 255, nullable = false)
+    public String posttitle;
+
+    @Lob
+    @Column(name = "content", nullable = false)
+    public String postcontent;
+
+    @Column(name = "author_id", length = 36, nullable = false)
+    public String postuserid;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "author_id", referencedColumnName = "user_id", foreignKey = @ForeignKey(name = "fk_post_user"), insertable = false, updatable = false)
+    public User author;
+
+    @Column(name = "created_at", nullable = false)
+    @Temporal(TemporalType.TIMESTAMP)
+    public Date posttime;
+
+    @Column(name = "reply_count", nullable = false)
+    public int replytime;
+
+    @Column(name = "view_count", nullable = false)
+    public int readtime;
+}
diff --git a/src/main/java/entity/PostReply.java b/src/main/java/entity/PostReply.java
new file mode 100644
index 0000000..2845f10
--- /dev/null
+++ b/src/main/java/entity/PostReply.java
@@ -0,0 +1,38 @@
+package entity;
+
+import java.util.Date;
+import javax.persistence.*;
+
+@Entity
+@Table(name = "PostReply")
+public class PostReply {
+    @Id
+    @Column(name = "reply_id", length = 64, nullable = false)
+    public String replyid;
+
+    @Column(name = "post_id", length = 64, nullable = false)
+    public String postid;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "post_id", referencedColumnName = "post_id", 
+                foreignKey = @ForeignKey(name = "fk_pr_post"), 
+                insertable = false, updatable = false)
+    public Post post;
+
+    @Column(name = "author_id", length = 36, nullable = false)
+    public String authorid;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "author_id", referencedColumnName = "user_id", 
+                foreignKey = @ForeignKey(name = "fk_pr_user"), 
+                insertable = false, updatable = false)
+    public User author;
+
+    @Lob
+    @Column(name = "content", nullable = false)
+    public String content;
+
+    @Column(name = "created_at", nullable = false)
+    @Temporal(TemporalType.TIMESTAMP)
+    public Date createdAt;
+}
\ No newline at end of file
diff --git a/src/main/java/entity/Profile.java b/src/main/java/entity/Profile.java
new file mode 100644
index 0000000..2ff6979
--- /dev/null
+++ b/src/main/java/entity/Profile.java
@@ -0,0 +1,46 @@
+package entity;
+
+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;
+import javax.persistence.Transient;
+
+@Entity
+@Table(name = "UserMigration")
+public class Profile {//迁移信息
+    @Id
+    @Column(name = "migration_id", length = 64, nullable = false)
+    public String profileurl;
+
+    @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_um_user"), insertable = false, updatable = false)
+    public User user;
+
+    @Column(name = "approved", nullable = false)
+    public boolean exampass;
+
+    @Column(name = "pending_magic", nullable = false)
+    public String magictogive;
+
+    @Column(name = "pending_uploaded", nullable = false)
+    public String uploadtogive;
+
+    @Transient
+    public String downloadtogive;
+
+    @Column(name = "granted_magic", nullable = false)
+    public String magicgived;
+
+    @Column(name = "granted_uploaded", nullable = false)
+    public String uploadgived;
+
+    @Transient
+    public String downloadgived;
+}
diff --git a/src/main/java/entity/Seed.java b/src/main/java/entity/Seed.java
new file mode 100644
index 0000000..eabf49d
--- /dev/null
+++ b/src/main/java/entity/Seed.java
@@ -0,0 +1,53 @@
+package entity;
+
+import java.util.Date;
+
+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;
+import javax.persistence.Temporal;
+import javax.persistence.TemporalType;
+
+@Entity
+@Table(name = "Seed")
+public class Seed {
+    @Id
+    @Column(name = "seed_id", length = 64, nullable = false)
+    public String seedid;
+
+    @Column(name = "owner_user_id", length = 36, nullable = false)
+    public String seeduserid;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "owner_user_id", referencedColumnName = "user_id", foreignKey = @ForeignKey(name = "fk_seed_user"), insertable = false, updatable = false)
+    public User user;
+
+    @Column(name = "fake_hits", nullable = false)
+    public int faketime;
+
+    @Column(name = "last_fake_check")
+    @Temporal(TemporalType.TIMESTAMP)
+    public Date lastfakecheck;
+
+    @Column(name = "external_url")
+    public String outurl;
+
+    @Column(name = "title", length = 255, nullable = false)
+    public String title;
+
+    @Column(name = "subtitle", length = 255)
+    public String subtitle;
+
+    @Column(name = "size", length = 50, nullable = false)
+    public String seedsize;
+
+    @Column(name = "tags")
+    public String seedtag;
+
+    @Column(name = "popularity", nullable = false)
+    public int downloadtimes;
+}
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/entity/TTorent.java b/src/main/java/entity/TTorent.java
new file mode 100644
index 0000000..167e853
--- /dev/null
+++ b/src/main/java/entity/TTorent.java
@@ -0,0 +1,5 @@
+package entity;
+
+public class TTorent{
+    
+}
\ No newline at end of file
diff --git a/src/main/java/entity/TransRecord.java b/src/main/java/entity/TransRecord.java
new file mode 100644
index 0000000..cf7ac7f
--- /dev/null
+++ b/src/main/java/entity/TransRecord.java
@@ -0,0 +1,54 @@
+package entity;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.ForeignKey;
+import javax.persistence.Id;
+import javax.persistence.IdClass;
+import javax.persistence.JoinColumn;
+import javax.persistence.ManyToOne;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "Transport")
+@IdClass(TransportId.class)
+public class TransRecord{
+    @Id
+    @Column(name = "task_id", length = 64, nullable = false)
+    public String taskid;
+
+    @Id
+    @Column(name = "uploader_id", length = 36, nullable = false)
+    public String uploaduserid;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "uploader_id", referencedColumnName = "user_id", foreignKey = @ForeignKey(name = "fk_tr_user_up"), insertable = false, updatable = false)
+    public User uploader;
+
+    @Id
+    @Column(name = "downloader_id", length = 36, nullable = false)
+    public String downloaduserid;
+
+    @ManyToOne(optional = false)
+    @JoinColumn(name = "downloader_id", referencedColumnName = "user_id", foreignKey = @ForeignKey(name = "fk_tr_user_down"), insertable = false, updatable = false)
+    public User downloader;
+
+    @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_tr_seed"), insertable = false, updatable = false)
+    public Seed seed;
+
+    @Column(name = "uploaded", nullable = false)
+    public long upload;
+
+    @Column(name = "downloaded", nullable = false)
+    public long download;
+
+    @Column(name = "upload_peak", nullable = false)
+    public long maxupload;
+
+    @Column(name = "download_peak", nullable = false)
+    public long maxdownload;
+}
\ No newline at end of file
diff --git a/src/main/java/entity/TransportId.java b/src/main/java/entity/TransportId.java
new file mode 100644
index 0000000..f79962f
--- /dev/null
+++ b/src/main/java/entity/TransportId.java
@@ -0,0 +1,38 @@
+package entity;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class TransportId implements Serializable {
+    private String taskid;
+    private String uploaduserid;
+    private String downloaduserid;
+
+    public TransportId() {}
+
+    public TransportId(String taskid, String uploaduserid, String downloaduserid) {
+        this.taskid = taskid;
+        this.uploaduserid = uploaduserid;
+        this.downloaduserid = downloaduserid;
+    }
+
+    public String getTaskid() { return taskid; }
+    public void setTaskid(String taskid) { this.taskid = taskid; }
+    public String getUploaduserid() { return uploaduserid; }
+    public void setUploaduserid(String uploaduserid) { this.uploaduserid = uploaduserid; }
+    public String getDownloaduserid() { return downloaduserid; }
+    public void setDownloaduserid(String downloaduserid) { this.downloaduserid = downloaduserid; }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        TransportId that = (TransportId) o;
+        return Objects.equals(taskid, that.taskid) && Objects.equals(uploaduserid, that.uploaduserid) && Objects.equals(downloaduserid, that.downloaduserid);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(taskid, uploaduserid, downloaduserid);
+    }
+}
\ No newline at end of file
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/entity/UserId.java b/src/main/java/entity/UserId.java
new file mode 100644
index 0000000..bc25675
--- /dev/null
+++ b/src/main/java/entity/UserId.java
@@ -0,0 +1,36 @@
+package entity;
+
+import java.io.Serializable;
+import java.util.Objects;
+
+public class UserId implements Serializable {
+    private String userid;
+    private String email;
+
+    public UserId() {}
+
+    public UserId(String userid, String email) {
+        this.userid = userid;
+        this.email = email;
+    }
+
+    // getters and setters
+    public String getUserid() { return userid; }
+    public void setUserid(String userid) { this.userid = userid; }
+
+    public String getEmail() { return email; }
+    public void setEmail(String email) { this.email = email; }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        UserId userId = (UserId) o;
+        return Objects.equals(userid, userId.userid) && Objects.equals(email, userId.email);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(userid, email);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/entity/UserPT.java b/src/main/java/entity/UserPT.java
new file mode 100644
index 0000000..bc5d455
--- /dev/null
+++ b/src/main/java/entity/UserPT.java
@@ -0,0 +1,46 @@
+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;
+import javax.persistence.MapsId;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+
+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, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
+    @MapsId
+    @JoinColumn(name = "user_id", foreignKey = @ForeignKey(name = "fk_pt_user"))
+    public User user;
+
+    @Column(name = "magic", nullable = false)
+    public int magic;
+
+    @Column(name = "uploaded", nullable = false)
+    public long upload;
+
+    @Column(name = "downloaded", nullable = false)
+    public long download;
+
+    @Column(name = "ratio", nullable = false, precision = 5, scale = 2)
+    public double share;
+
+    @Column(name = "default_seed_path")
+    public String farmurl;
+
+    @Column(name = "vip_downloads", nullable = false)
+    public int viptime;
+}
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";
+}
