gpt4 book ai didi

java - 没有 EntityManager 具有可用于当前线程的实际事务

转载 作者:行者123 更新时间:2023-11-30 06:26:38 24 4
gpt4 key购买 nike

运行 sampleTest() 方法时,在 this.itemRepository.deleteAll() 处发生此错误。

@ExtendWith(SpringExtension.class)
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
@SpringBootTest
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@Rollback(false)
public class ScheduleTests {

private static final Logger LOGGER = LoggerFactory.getLogger(ScheduleTests.class);

@Autowired
private ScheduleRepository scheduleRepository;

@Autowired
private ItemRepository itemRepository;

@Autowired
private ItemQualifierRepository itemQualifierRepository;

@Autowired
private MappingRepository mappingRepository;

@BeforeAll
public void setUp() {
restoreInitialData();
LOGGER.info("Initial data restored");
}

@Test
public void sampleTest() {
File feed = new File("target/test-classes/TestFeedOK.json");
Feed.ingest(feed);
LOGGER.info("Feed {} ingested", feed.getName());
}

private void restoreInitialData() {
this.itemRepository.deleteAll();
this.mappingRepository.deleteByTableName("event");
}
}

restoreInitialData()添加@Transactional注释并不能解决问题 - https://stackoverflow.com/a/32552558/3536552

你知道如何解决吗?

最佳答案

我认为问题是 restoreInitialData 是从 setup 调用的,这是一个 @BeforeAll 方法。 此时 Spring 还没有介入来创建事务。只需将其更改为 @BeforeEach 并检查 @Transactional 即可。 如果你想让某件事只执行一次。尝试这个方法

private static boolean setUpIsDone = false;
.....
public void setUp() {
if (setUpIsDone) {
return;
}
// do the setup
setUpIsDone = true;
}

关于java - 没有 EntityManager 具有可用于当前线程的实际事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47072493/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com