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

实体管理器未正确持久化

实体管理器未正确持久化

慕桂英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

@EnableJpaAuditing

public 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贡献1585条经验 获得超8个赞

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


...

    @Bean

    public PlatformTransactionManager transactionManager() {

        JpaTransactionManager transactionManager = new JpaTransactionManager();

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

        return transactionManager;

    }

...


查看完整回答
反对 回复 2022-09-22

添加回答

举报

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