Spring Boot:每次向客户端发出删除请求时,如何将实体 ID 重置回 0

Posted

技术标签:

【中文标题】Spring Boot:每次向客户端发出删除请求时,如何将实体 ID 重置回 0【英文标题】:Spring Boot: How can I reset the entity ID back to 0 every time I make Delete request with client 【发布时间】:2021-06-04 15:41:23 【问题描述】:

我使用 Java Spring Boot 创建了一个服务器,并发出了删除存储库中所有条目的删除请求。我尝试将其添加回来,并且 ID 递增而不是从 0 开始。

@DeleteMapping("/donors")
public String deleteAllDOnors() 
    return donorService.deleteAllDonors();


@Id
@GeneratedValue
private Long id;

编辑。到目前为止,我在服务类中尝试过这个:

@PersistenceContext
EntityManager entityManager;

同班:

public String deleteAllDonors() 
    entityManager
            .createNativeQuery("ALTER TABLE SomeTable AUTO_INCREMENT = 1")
            .executeUpdate();
    donorRepository.deleteAll();
    return "All donors removed!";

我得到一个

javax.persistence.TransactionRequiredException: Executing an update/delete query
at org.hibernate.internal.AbstractSharedSessionContract.checkTransactionNeededForUpdateOperation(AbstractSharedSessionContract.java:422) ~[hibernate-core-5.4.28.Final.jar:5.4.28.Final]
at org.hibernate.query.internal.AbstractProducedQuery.executeUpdate(AbstractProducedQuery.java:1668) ~[hibernate-core-5.4.28.Final.jar:5.4.28.Final]

【问题讨论】:

【参考方案1】:

不确定您使用的是什么持久层,但以下是 JPA 的示例,说明如何重置它

entityManager
    .createNativeQuery("ALTER TABLE SomeTable AUTO_INCREMENT = 1")
    .executeUpdate();

【讨论】:

我提前道歉,但我只是最近在学习。您能否将我链接到持久层是什么,以便我可以阅读它并为您提供更多信息?我到底把这个放在哪里?我尝试通过放置“@PersistenceContext private EntityManager entityManager;”将其放入服务中但我只是得到了一个错误。无论如何感谢您的回答。 不用担心。所以问题是你如何从 Spring Boot 应用程序连接到 DB?您使用的是 Spring-data、Spring-data-JPA、JPA-hibernate 等吗? 我正在使用 spring-data-JPA。如果该信息有帮助,我也将它连接到 mysql 更新了我的帖子以提供更多详细信息。 您在上面所做的一切都是正确的,只需将 @Transactional 添加到您的类中,例如 @Transactional Public yourClass

以上是关于Spring Boot:每次向客户端发出删除请求时,如何将实体 ID 重置回 0的主要内容,如果未能解决你的问题,请参考以下文章

如何向 feign 客户端添加请求拦截器?

在 Spring Boot 中从 jwt 获取附加属性

java - 如何从Java Spring Boot中的请求标头获取不记名令牌?

基于Spring Boot 2.0.3的Spring Cloud Eureka Server与Client

使用spring boot(安全)和keycloak启用角色身份验证?

向服务器发送 POST 请求,服务器的响应为空,Angular - Spring-boot