在我的Spring Data JPA应用程序中,我从Hibernate切换到EclipseLink只是为了发现现在EntityManager实例不再是事务的一部分,因此在调用persist()
时不会插入任何数据。
如果我手动拨打entityManager.joinTransaction()
它可行,但这肯定不是解决方案。
我创建了一个允许重现问题的示例项目:https://github.com/micheljung/eclipselink-no-transaction
注意它不会在控制台中打印INSERT语句,以及保存的实体的ID如何保持null
:
ID of saved entity: null
如果你包含Hibernate并排除EclipseLink,它可以工作:
Hibernate: insert into greeting (id, greeting) values (null, ?)
ID of saved entity: 1
我已经花了最后3小时阅读所有相关的博客和SO帖子,但没有一个结果显示任何问题。
非常感谢任何帮助。
答案 0 :(得分:1)
添加
eclipselink.ddl-generation: drop-and-create-tables
到您的JPA属性(否则GREETING表格不存在),
并添加
@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
return new JpaTransactionManager(emf);
}
到EclipseLinkNoTransactionApplication类。