Spring / EclipseLink

时间:2017-03-18 13:58:30

标签: java spring hibernate jpa

在我的Spring Data JPA应用程序中,我从Hibernate切换到EclipseLink只是为了发现现在EntityManager实例不再是事务的一部分,因此在调用persist()时不会插入任何数据。

如果我手动拨打entityManager.joinTransaction()它可行,但这肯定不是解决方案。

enter image description here enter image description here

我创建了一个允许重现问题的示例项目: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帖子,但没有一个结果显示任何问题。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

添加

eclipselink.ddl-generation: drop-and-create-tables

到您的JPA属性(否则GREETING表格不存在),

并添加

@Bean
public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
    return new JpaTransactionManager(emf);
}

到EclipseLinkNoTransactionApplication类。