diff --git a/src/main/java/database/Database2.java b/src/main/java/database/Database2.java
index 8d919b6..28a8ac5 100644
--- a/src/main/java/database/Database2.java
+++ b/src/main/java/database/Database2.java
@@ -40,6 +40,91 @@
 //     }
 
 //     @Override
+//     public int RegisterUser(User userinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public int UpdateInformation(User userinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public User GetInformation(String userid) {
+//         return null;
+//     }
+
+//     @Override
+//     public UserPT GetInformationPT(String userid) {
+//         return null;
+//     }
+
+//     @Override
+//     public int UpdateInformationPT(UserPT userinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public int RegisterUserPT(UserPT userinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public Seed GetSeedInformation(String seedid) {
+//         return null;
+//     }
+
+//     @Override
+//     public int RegisterSeed(Seed seedinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public int UpdateSeed(Seed seedinfo) {
+//         return 0;
+//     }
+
+//     @Override
+//     public Seed[] SearchSeed(String userQ) {
+//         return new Seed[0];
+//     }
+
+//     @Override
+//     public int AddNotice(Notice notice) {
+//         return 0;
+//     }
+
+//     @Override
+//     public boolean UpdateNotice(Notice notice) {
+//         return false;
+//     }
+
+//     @Override
+//     public boolean DeleteNotice(String noticeid) {
+//         return false;
+//     }
+
+//     @Override
+//     public int GetUserAvailableInviteTimes(String userid) {
+//         return 0;
+//     }
+
+//     @Override
+//     public int InviteUser(String inviterid, String inviteemail) {
+//         return 0;
+//     }
+
+//     @Override
+//     public boolean AddCollect(String userid, String postid) {
+//         return false;
+//     }
+
+//     @Override
+//     public boolean DeleteCollect(String userid, String postid) {
+//         return false;
+//     }
+
+//     @Override
 //     public int AddBegSeed(BegInfo info) {
 //         if (info == null || info.begid == null || info.begid.isEmpty()) {
 //             logger.warn("Invalid parameter: info is null or begid is empty");
@@ -208,13 +293,14 @@
 //             Long voteCount = new JPAQuery<>(em)
 //                     .select(uv.count())
 //                     .from(uv)
-//                     .where(uv.userId.eq(userId)
-//                             .and(uv.begId.eq(begId))
-//                             .and(uv.seedId.eq(seedId)))
+//                     .where(uv.user.userid.eq(userId))
+//                     .where(uv.begInfo.begid.eq(begId))
+//                     .where(uv.seed.seedid.eq(seedId))
 //                     .fetchOne();
 
 //             if (voteCount > 0) {
-//                 logger.warn("User {} has already voted for seed {} in beg {}", userId, seedId, begId);
+//                 logger.warn("User {} has already voted for seed {} in beg {}", userId,
+//                         seedId, begId);
 //                 return 1;
 //             }
 
@@ -278,12 +364,13 @@
 //             Long submitCount = new JPAQuery<>(em)
 //                     .select(ss.count())
 //                     .from(ss)
-//                     .where(ss.begId.eq(begid)
-//                             .and(ss.seedId.eq(seed.seedid)))
+//                     .where(ss.begInfo.begid.eq(begid))
+//                     .where(ss.seed.seedid.eq(seed.seedid))
 //                     .fetchOne();
 
 //             if (submitCount > 0) {
-//                 logger.warn("Seed {} has already been submitted for beg {}", seed.seedid, begid);
+//                 logger.warn("Seed {} has already been submitted for beg {}", seed.seedid,
+//                         begid);
 //                 return 1;
 //             }
 
@@ -338,15 +425,15 @@
 //                 // 2. 查找投票最多的提交任务
 //                 QSubmitSeed ss = QSubmitSeed.submitSeed;
 //                 Tuple topSubmission = new JPAQuery<>(em)
-//                         .select(ss.seedId, ss.votes)
+//                         .select(ss.seed.seedid, ss.votes)
 //                         .from(ss)
-//                         .where(ss.begId.eq(beg.begid))
+//                         .where(ss.begInfo.begid.eq(beg.begid))
 //                         .orderBy(ss.votes.desc())
 //                         .limit(1)
 //                         .fetchOne();
 
 //                 if (topSubmission != null && topSubmission.get(ss.votes) > 0) {
-//                     String seedId = topSubmission.get(ss.seedId);
+//                     String seedId = topSubmission.get(ss.seed.seedid);
 
 //                     // 3. 获取上传者ID
 //                     QSeed s = QSeed.seed;
@@ -374,7 +461,8 @@
 //             }
 
 //             tx.commit();
-//             logger.info("Successfully settled {} expired beg requests", expiredBegs.size());
+//             logger.info("Successfully settled {} expired beg requests",
+//                     expiredBegs.size());
 
 //         } catch (Exception e) {
 //             if (tx != null && tx.isActive()) {
