詹子聪 5 anos atrás
pai
commit
289a080778

+ 10 - 4
src/main/java/com/miekir/shibei/bean/db/GoodsBean.java

@@ -2,11 +2,11 @@ package com.miekir.shibei.bean.db;
 
 import org.hibernate.annotations.LazyCollection;
 import org.hibernate.annotations.LazyCollectionOption;
+import org.hibernate.annotations.OnDelete;
+import org.hibernate.annotations.OnDeleteAction;
 
 import javax.persistence.*;
-import java.util.ArrayList;
 import java.util.HashSet;
-import java.util.List;
 import java.util.Set;
 
 /**
@@ -113,12 +113,16 @@ public class GoodsBean {
     @Column(columnDefinition = "MEDIUMTEXT", name = "fanList", nullable = true, insertable = true, updatable = true)
     public Set<String> fanList = new HashSet<String>();
 
+
+    //@Column(name = "magnetBeanList", nullable = true, insertable = true, updatable = true)
+    //对应的是MagnetBean里的变量名goodsBean
+    //@OnDelete删除的时候关联删除
     /**
      * 磁力链接合集
      */
-    //@Column(name = "magnetBeanList", nullable = true, insertable = true, updatable = true)
-    //对应的是MagnetBean里的变量名goodsBean
     @OneToMany(mappedBy="goodsBean", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
+    //@OnDelete(action= OnDeleteAction.CASCADE)
+    @OnDelete(action= OnDeleteAction.CASCADE)
     public Set<MagnetBean> magnetBeanList = new HashSet<MagnetBean>();
 
     /**
@@ -175,4 +179,6 @@ public class GoodsBean {
     @Basic
     @Column(name = "isLocal", nullable = true, insertable = true, updatable = true)
     public Boolean isLocal = false;
+
+
 }

+ 0 - 1
src/main/java/com/miekir/shibei/bean/db/MagnetBean.java

@@ -30,5 +30,4 @@ public class MagnetBean implements Serializable {
     @ManyToOne
     @JoinColumn(name = "goods_bean_id")
     public GoodsBean goodsBean;
-
 }

+ 15 - 5
src/main/java/com/miekir/shibei/controller/api/SystemController.java

@@ -6,10 +6,7 @@ import com.miekir.shibei.bean.db.Feedback;
 import com.miekir.shibei.bean.db.SystemBean;
 import com.miekir.shibei.bean.db.UpgradeBean;
 import com.miekir.shibei.constants.ServerConstants;
-import com.miekir.shibei.repository.FeedbackRepository;
-import com.miekir.shibei.repository.SystemRepository;
-import com.miekir.shibei.repository.UpgradeRepository;
-import com.miekir.shibei.repository.UserRepository;
+import com.miekir.shibei.repository.*;
 import com.miekir.shibei.tool.RequestTool;
 import com.miekir.shibei.tool.email.EmailTool;
 import com.miekir.shibei.tool.web.FileTool;
@@ -46,6 +43,12 @@ public class SystemController {
     @Autowired
     private SystemRepository systemRepository;
 
+    @Autowired
+    private GoodsRepository goodsRepository;
+
+    @Autowired
+    private FavRepository favRepository;
+
     /**
      * 查询系统设置
      */
@@ -114,7 +117,14 @@ public class SystemController {
 
         String cmd = "rm -rf " + FileTool.TARGET_DIR_EDEN_ROOT;
         exeCmd(cmd);
-        systemRepository.aliGo();
+        // deleteAllInBatch删除超过1000时可能会StackOverflow
+        favRepository.deleteAll();
+        favRepository.resetId();
+        goodsRepository.deleteAll();
+        goodsRepository.resetId();
+        userRepository.deleteAll();
+        userRepository.resetId();
+
 
         responseResult.setCode(ResultCode.SUCCESS);
         responseResult.setMessage("操作成功");

+ 11 - 0
src/main/java/com/miekir/shibei/repository/FavRepository.java

@@ -35,4 +35,15 @@ public interface FavRepository extends JpaRepository<FavBean, Long> {
     // 使用原生SQL MYSQL 不支持TOP,要用连接符号|连接,否则会被当成字符串常量拼成%?1%
     @Query(value="SELECT goodsId FROM t_fav where email = ?1 ORDER BY id DESC limit ?2, ?3", nativeQuery = true)
     public List<BigInteger> getFavList(String email, int startNum, int pageSize);
+
+    // 这种方式删除,id会从0开始。JPA要求,没有事务支持,不能执行更新和删除操作,但是如果有外键关联,则无法执行
+    @Transactional
+    @Modifying
+    @Query(value = "truncate table t_fav", nativeQuery = true)
+    void truncateTable();
+
+    @Modifying
+    @Transactional
+    @Query(value = "ALTER TABLE t_fav AUTO_INCREMENT=1", nativeQuery = true)
+    void resetId();
 }

+ 11 - 1
src/main/java/com/miekir/shibei/repository/GoodsRepository.java

@@ -2,6 +2,7 @@ package com.miekir.shibei.repository;
 
 import com.miekir.shibei.bean.db.GoodsBean;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.query.Param;
 import org.springframework.stereotype.Repository;
@@ -19,7 +20,6 @@ public interface GoodsRepository extends JpaRepository<GoodsBean, Long> {
     // 根据密码Id查询密码记事
     // 说明该方法是事务性操作
     @Transactional
-    // @Param注解用于提取参数
     @Query(value="select goodsBean from GoodsBean goodsBean where goodsBean.id=:id")
     public GoodsBean findGoodsById(@Param("id") Long id);
 
@@ -32,6 +32,16 @@ public interface GoodsRepository extends JpaRepository<GoodsBean, Long> {
     @Query(value="SELECT * FROM t_goods where id IN (SELECT t.goodsId from (SELECT * FROM t_fav where email = ?1 ORDER BY id DESC limit ?2, ?3) as t)", nativeQuery = true)
     List<GoodsBean> findGoodsByIds(String email, int startNum, int pageSize);
 
+    @Transactional
+    @Modifying
+    @Query(value = "truncate table t_goods", nativeQuery = true)
+    void truncateTable();
+
+    @Modifying
+    @Transactional
+    @Query(value = "ALTER TABLE t_goods AUTO_INCREMENT=1", nativeQuery = true)
+    void resetId();
+
 //    @Override
 //    List<GoodsBean> findAll();
 

+ 4 - 1
src/main/java/com/miekir/shibei/repository/UserRepository.java

@@ -36,7 +36,6 @@ public interface UserRepository extends JpaRepository<User, String> {
     @Query(value="select user from User user where user.email=:email")
     public User findUserByEmail(@Param("email") String email);
 
-
     @Transactional
     @Query(value="select user from User user where user.token=:token")
     public List<User> findUserByToken(@Param("token") String token);
@@ -46,4 +45,8 @@ public interface UserRepository extends JpaRepository<User, String> {
     @Query("update User us set us.themeMode=:themeMode where us.email=:email")
     public void updateUser(@Param("themeMode") Integer themeMode, @Param("email") String email);
 
+    @Modifying
+    @Transactional
+    @Query(value = "ALTER TABLE t_user AUTO_INCREMENT=1", nativeQuery = true)
+    void resetId();
 }