diff --git a/src/main/java/com/pt5/pthouduan/entity/AnimeInfo.java b/src/main/java/com/pt5/pthouduan/entity/AnimeInfo.java
new file mode 100644
index 0000000..baf9432
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/AnimeInfo.java
@@ -0,0 +1,22 @@
+package com.pt5.pthouduan.entity;
+
+// 实体类：AnimeInfo.java
+public class AnimeInfo {
+    private Long torrentid;
+    private String genre;
+    private String resolution;
+    private String format;
+
+    // Getters and Setters
+    // Getters
+    public Long getTorrentid() { return torrentid; }
+    public String getGenre() { return genre; }
+    public String getResolution() { return resolution; }
+    public String getFormat() { return format; }
+
+    // Setters
+    public void setTorrentid(Long torrentid) { this.torrentid = torrentid; }
+    public void setGenre(String genre) { this.genre = genre; }
+    public void setResolution(String resolution) { this.resolution = resolution; }
+    public void setFormat(String format) { this.format = format; }
+}
\ No newline at end of file
diff --git a/src/main/java/com/pt5/pthouduan/entity/DocumentaryInfo.java b/src/main/java/com/pt5/pthouduan/entity/DocumentaryInfo.java
new file mode 100644
index 0000000..445296c
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/DocumentaryInfo.java
@@ -0,0 +1,22 @@
+package com.pt5.pthouduan.entity;
+
+// 实体类：DocumentaryInfo.java
+public class DocumentaryInfo {
+    private Long torrentid;
+    private Integer year;
+    private String source;
+    private String format;
+
+    // Getters and Setters
+    // Getters
+    public Long getTorrentid() { return torrentid; }
+    public Integer getYear() { return year; }
+    public String getSource() { return source; }
+    public String getFormat() { return format; }
+
+    // Setters
+    public void setTorrentid(Long torrentid) { this.torrentid = torrentid; }
+    public void setYear(Integer year) { this.year = year; }
+    public void setSource(String source) { this.source = source; }
+    public void setFormat(String format) { this.format = format; }
+}
\ No newline at end of file
diff --git a/src/main/java/com/pt5/pthouduan/entity/EduInfo.java b/src/main/java/com/pt5/pthouduan/entity/EduInfo.java
new file mode 100644
index 0000000..852bc83
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/EduInfo.java
@@ -0,0 +1,19 @@
+package com.pt5.pthouduan.entity;
+
+// 实体类：EduInfo.java
+public class EduInfo {
+    private Long torrentid;
+    private String genre;
+    private String format;
+
+    // Getters and Setters
+    // Getters
+    public Long getTorrentid() { return torrentid; }
+    public String getGenre() { return genre; }
+    public String getFormat() { return format; }
+
+    // Setters
+    public void setTorrentid(Long torrentid) { this.torrentid = torrentid; }
+    public void setGenre(String genre) { this.genre = genre; }
+    public void setFormat(String format) { this.format = format; }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/GameInfo.java b/src/main/java/com/pt5/pthouduan/entity/GameInfo.java
new file mode 100644
index 0000000..aceaab0
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/GameInfo.java
@@ -0,0 +1,25 @@
+package com.pt5.pthouduan.entity;
+
+// 实体类：GameInfo.java
+public class GameInfo {
+    private Long torrentid;
+    private String platform;
+    private String genre;
+    private String format;
+    private String language;
+
+    // Getters and Setters
+    // Getters
+    public Long getTorrentid() { return torrentid; }
+    public String getPlatform() { return platform; }
+    public String getGenre() { return genre; }
+    public String getFormat() { return format; }
+    public String getLanguage() { return language; }
+
+    // Setters
+    public void setTorrentid(Long torrentid) { this.torrentid = torrentid; }
+    public void setPlatform(String platform) { this.platform = platform; }
+    public void setGenre(String genre) { this.genre = genre; }
+    public void setFormat(String format) { this.format = format; }
+    public void setLanguage(String language) { this.language = language; }
+}
\ No newline at end of file
diff --git a/src/main/java/com/pt5/pthouduan/entity/MovieInfo.java b/src/main/java/com/pt5/pthouduan/entity/MovieInfo.java
new file mode 100644
index 0000000..ce89df3
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/MovieInfo.java
@@ -0,0 +1,62 @@
+package com.pt5.pthouduan.entity;
+
+// 实体类：MovieInfo.java
+public class MovieInfo {
+    private Long torrentid;
+    private String region;
+    private Integer year;
+    private String genre;
+    private String codecFormat;
+    private String resolution;
+
+    // Getters and Setters
+    // Getters
+    public Long getTorrentid() {
+        return torrentid;
+    }
+
+    public String getRegion() {
+        return region;
+    }
+
+    public Integer getYear() {
+        return year;
+    }
+
+    public String getGenre() {
+        return genre;
+    }
+
+    public String getCodecFormat() {
+        return codecFormat;
+    }
+
+    public String getResolution() {
+        return resolution;
+    }
+
+    // Setters
+    public void setTorrentid(Long torrentid) {
+        this.torrentid = torrentid;
+    }
+
+    public void setRegion(String region) {
+        this.region = region;
+    }
+
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+
+    public void setGenre(String genre) {
+        this.genre = genre;
+    }
+
+    public void setCodecFormat(String codecFormat) {
+        this.codecFormat = codecFormat;
+    }
+
+    public void setResolution(String resolution) {
+        this.resolution = resolution;
+    }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/MusicInfo.java b/src/main/java/com/pt5/pthouduan/entity/MusicInfo.java
new file mode 100644
index 0000000..d834c69
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/MusicInfo.java
@@ -0,0 +1,25 @@
+package com.pt5.pthouduan.entity;
+
+// 实体类：MusicInfo.java
+public class MusicInfo {
+    private Long torrentid;
+    private String genre;
+    private String region;
+    private String style;
+    private String format;
+
+    // Getters and Setters
+    // Getters
+    public Long getTorrentid() { return torrentid; }
+    public String getGenre() { return genre; }
+    public String getRegion() { return region; }
+    public String getStyle() { return style; }
+    public String getFormat() { return format; }
+
+    // Setters
+    public void setTorrentid(Long torrentid) { this.torrentid = torrentid; }
+    public void setGenre(String genre) { this.genre = genre; }
+    public void setRegion(String region) { this.region = region; }
+    public void setStyle(String style) { this.style = style; }
+    public void setFormat(String format) { this.format = format; }
+}
diff --git a/src/main/java/com/pt5/pthouduan/entity/OtherInfo.java b/src/main/java/com/pt5/pthouduan/entity/OtherInfo.java
new file mode 100644
index 0000000..212d552
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/OtherInfo.java
@@ -0,0 +1,16 @@
+package com.pt5.pthouduan.entity;
+
+// 实体类：OtherInfo.java
+public class OtherInfo {
+    private Long torrentid;
+    private String gener;
+
+    // Getters and Setters
+    // Getters
+    public Long getTorrentid() { return torrentid; }
+    public String getGenre() { return gener; }
+
+    // Setters
+    public void setTorrentid(Long torrentid) { this.torrentid = torrentid; }
+    public void setGenre(String genre) { this.gener = genre; }
+}
\ No newline at end of file
diff --git a/src/main/java/com/pt5/pthouduan/entity/ShowInfo.java b/src/main/java/com/pt5/pthouduan/entity/ShowInfo.java
new file mode 100644
index 0000000..f4dab6e
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/ShowInfo.java
@@ -0,0 +1,22 @@
+package com.pt5.pthouduan.entity;
+
+// 实体类：ShowInfo.java
+public class ShowInfo {
+    private Long torrentid;
+    private Boolean isMainland;
+    private String genre;
+    private String format;
+
+    // Getters and Setters
+    // Getters
+    public Long getTorrentid() { return torrentid; }
+    public Boolean getIsMainland() { return isMainland; }
+    public String getGenre() { return genre; }
+    public String getFormat() { return format; }
+
+    // Setters
+    public void setTorrentid(Long torrentid) { this.torrentid = torrentid; }
+    public void setIsMainland(Boolean isMainland) { this.isMainland = isMainland; }
+    public void setGenre(String genre) { this.genre = genre; }
+    public void setFormat(String format) { this.format = format; }
+}
\ No newline at end of file
diff --git a/src/main/java/com/pt5/pthouduan/entity/SportInfo.java b/src/main/java/com/pt5/pthouduan/entity/SportInfo.java
new file mode 100644
index 0000000..7774a75
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/SportInfo.java
@@ -0,0 +1,22 @@
+package com.pt5.pthouduan.entity;
+
+// 实体类：SportInfo.java
+public class SportInfo {
+    private Long torrentid;
+    private String genre;
+    private String eventType;
+    private String format;
+
+    // Getters and Setters
+    // Getters
+    public Long getTorrentid() { return torrentid; }
+    public String getGenre() { return genre; }
+    public String getEventType() { return eventType; }
+    public String getFormat() { return format; }
+
+    // Setters
+    public void setTorrentid(Long torrentid) { this.torrentid = torrentid; }
+    public void setGenre(String genre) { this.genre = genre; }
+    public void setEventType(String eventType) { this.eventType = eventType; }
+    public void setFormat(String format) { this.format = format; }
+}
\ No newline at end of file
diff --git a/src/main/java/com/pt5/pthouduan/entity/TvInfo.java b/src/main/java/com/pt5/pthouduan/entity/TvInfo.java
new file mode 100644
index 0000000..28a710d
--- /dev/null
+++ b/src/main/java/com/pt5/pthouduan/entity/TvInfo.java
@@ -0,0 +1,42 @@
+package com.pt5.pthouduan.entity;
+
+public class TvInfo {
+    private Long torrentId;  // 注意：变量名与之前风格保持一致，但 setTorrentId 方法可能不同
+    private String region;
+    private String format;
+    private String genre;
+
+    // Getters
+    public Long getTorrentId() {
+        return torrentId;
+    }
+
+    public String getRegion() {
+        return region;
+    }
+
+    public String getFormat() {
+        return format;
+    }
+
+    public String getGenre() {
+        return genre;
+    }
+
+    // Setters
+    public void setTorrentId(Long torrentId) {
+        this.torrentId = torrentId;
+    }
+
+    public void setRegion(String region) {
+        this.region = region;
+    }
+
+    public void setFormat(String format) {
+        this.format = format;
+    }
+
+    public void setGenre(String genre) {
+        this.genre = genre;
+    }
+}
\ No newline at end of file
