为了账号安全,请及时绑定邮箱和手机立即绑定

实体管理器未正确持久化

实体管理器未正确持久化

慕桂英546537 2022-09-22 15:43:52
我有一个带有休眠和jpa的弹簧启动应用程序。当尝试创建实体的新实例(通过任何一个或直接)时,一切似乎都很好(没有错误,并且返回的实例正在增加),但是这些实例被保存到数据库中,也不会在查询到orm时返回(niether by norFooJpaRepositoryentityManageridJpaRepository.findAll()entityManager.find(FooImpl.class, id))我尝试调用方法而不是 -> 抛出错误(无事务)saveAndFlushsaveJpaRepository我尝试手动刷新 ->相同的错误。entityManager我检查了 的齐平模式 - >它是“自动”entityManager我尝试直接使用 ->找不到任何实例entityManager.find(CourseImpl.class, id)我尝试用->注释服务方法没有区别@Transactional我的实体:@Entity@Table(name = "foo")public class FooImpl implements Foo{    @Id    @GeneratedValue    private Long id;    @Column    private String someOtherValue;    ...    @Override    public Long getId() {        return id;    }    @Override    public void setId(Long id) {        this.id = id;    }}我:Application.java@SpringBootApplication@EnableJpaRepositories@EnableTransactionManagement@EnableJpaAuditingpublic class Application extends SpringBootServletInitializer implements ApplicationContextAware {    private static ApplicationContext applicationContext;    @Override    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {        return application.sources(Application.class);    }    @Bean    @Primary    @ConfigurationProperties(prefix = "spring.datasource")    public javax.sql.DataSource primaryDataSource() {        DriverManagerDataSource dataSource = new DriverManagerDataSource();        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");        dataSource.setUsername("username");        dataSource.setPassword("n0tRea1Pasw0rd");        dataSource.setUrl("jdbc\\:mysql\\://localhost\\:3306/bar");        dataSource.setSchema("bar");        return dataSource;    }
查看完整描述

1 回答

?
郎朗坤

TA贡献1921条经验 获得超9个赞

问题是奇怪的默认事务处理(JPA存储库将它们的方法包装在 中,因此我是否也这样做并不重要)。此问题已通过创建“自定义”事务管理器 Bean 得到解决。具体来说,这丰富了以下内容:@TransactionalApplication.java


...

    @Bean

    public PlatformTransactionManager transactionManager() {

        JpaTransactionManager transactionManager = new JpaTransactionManager();

        transactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());

        return transactionManager;

    }

...


查看完整回答
反对 回复 2022-09-22
  • 1 回答
  • 0 关注
  • 69 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信