嗨,我正在用spring boot hibernate测试MySQL中的记录删除-插入-删除操作,我注意到一个问题,当插入发生时,记录似乎没有被完全删除。
3在hibernate kickstart上创建初始记录(通过类路径中的data.sql)
insert into car(id, name, color) values (1, 'Toyota Camry', 'blue');
insert into car(id, name, color) values (2, 'Suzuki Swift', 'yellow');
insert into car(id, name, color) values (3, 'Nissan Qashqai', 'red');
操作为
(1)创建的初始记录
(2)删除所有记录
(3)添加新记录
(4)删除所有记录
当执行断言时,发现结果列表中仍然包含最后一条记录,因此断言失败。
我想知道这是否是由于在插入发生之前没有完成删除操作造成的。
如果你能提供一些洞察力,非常感谢。
模型(car.java):
package com.example.demo.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@ApiModel(value = "Car", description = "The model for car")
@Schema
@Entity
@Data
public class Car {
@ApiModelProperty(notes = "Car ID.", example = "12345", required = false, position = 0)
@Id
@GeneratedValue
private Long id;
@ApiModelProperty(notes = "Car name.", example = "Suzuki Swift 2020", required = true, position = 1)
@NotNull
@Size(min = 1, max = 30, message = "Name must have length between 1 and 30")
private String name;
@ApiModelProperty(notes = "Car color.", example = "blue", required = true, position = 2)
@NotNull
@Size(min = 1, max = 30, message = "Color must have length between 1 and 30")
private String color;
}
存储库(Carreposiroty.java)
package com.example.demo.repo;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.example.demo.model.Car;
@Repository
public interface CarRepository extends JpaRepository<Car, Long> {
}
服务(TestService.java)
package com.example.demo.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.example.demo.model.Car;
import com.example.demo.repo.CarRepository;
@Service
public class TestService {
@Autowired
private CarRepository carRepository;
public List<Car> getAllCars() {
return carRepository.findAll();
}
@Transactional
public void addNewCar(Car car) {
carRepository.save(car);
}
@Transactional
public void deleteAllCars() {
carRepository.deleteAll();
}
}
JUnit
...
......
@Test
public void shouldBeAbleToDeleteCarAndAddCarAndGetAllCars() {
testService.deleteAllCars();
Car car = new Car();
car.setName("123456789012345678901234567890");
car.setColor("123456789012345678901234567890");
testService.addNewCar(car);
List<Car> carList = testService.getAllCars();
assertEquals(1, carList.size());
testService.deleteAllCars();
}
...
......
spring boot v2.3.1
pom.xml
...
.....
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
...
......
spring hibernate配置(application-test.yml)
spring.datasource.url: jdbc:mysql://[the host url]:3306/test
spring.datasource.username: [the username]
spring.datasource.password: [the password]
spring.jpa.hibernate.ddl-auto: create-drop
spring.datasource.initialization-mode: always
MySQL 8.0.17
这是因为DeleteAllCars()
没有将更改提交给DB,并且测试方法中的所有操作都包装在一个事务中,因为正在传播事务。在测试类上添加以下注释
@Transactional(propagation = Propagation.NEVER)
同时检查此相关问题,如何将数据刷新到活跃的spring事务中的数据库中?
我使用spring Boot2、jpa和Hibernate。Db是后置,我尝试删除一个带有子级的对象 如果我删除了Samplings,Samplings、testsamplings和Compressions也应该被删除。 从sample_letter=?的示例中删除和sampling_id=?和sampling_year=? 2018-10-03 22:21:05.832错误14511--[nio
我有一项服务,每天在Kubernetes上部署数千个短期工作。我试图让Kubernetes在完成后使用这里描述的功能删除这些作业: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#clean-up-finished-jobs-automatically 作业完成,但在表示的时间限制之
英文原文:http://emberjs.com/guides/getting-started/marking-a-model-as-complete-incomplete/ 接下来我们将更新我们的应用,允许用户将一个待办事项标记为完成或者为完成,并将更新信息持久化。 在index.html中更新模板,通过添加一个itemController参数在Handlebars的{{each}}助手中,将每个
我想在当前的中启动一个通知,即。当我按下通知时,我想输入。 但是,我不希望当前的在中完成。因为我正在接收数据,当我按下后退按钮时,我想留在。 关键是我不想让结束,不管我目前在哪个中。 那我该怎么办? 这是密码 问题是: 现在我输入,当我按下后退按钮时,我返回桌面。意味着已经完成了我不想要的。 这里是主要的
这是我正在研究的完全未来的例子 首先我从SupplySync调用compose方法,在这里我执行方法composeMethod,有三毫秒的延迟,然后它将创建一个文件并返回一个字符串作为结果。完成后,我调用Run方法,它只打印一个方法,然后有一个非阻塞方法从主线程运行。 我在这里面临的问题是,主线程执行完nonblockingmethod()并在3毫秒延迟之前退出进程,而随后的composeMeth
我正在使用kafka和elasticsearch设置flink流处理器。我想重播我的数据,但当我将并行度设置为1以上时,它不会完成程序,我认为这是因为Kafka流只看到一条消息,将其标识为流的结尾。 有没有办法告诉flink消费群中的所有线程在一个线程完成后立即结束?