【问题标题】:Taking instance of EntityManager Jpa以 EntityManager Jpa 为例
【发布时间】:2019-04-12 11:55:13
【问题描述】:

我正在使用 spring 和存储库级别连接到数据库。我正在使用 EntityManagerFactory 和 jpa 存储库。我的配置:

    @Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
    LocalContainerEntityManagerFactoryBean em
            = new LocalContainerEntityManagerFactoryBean();
    em.setDataSource(dataSource());
    em.setPackagesToScan("com.project.models");
    JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
    em.setJpaVendorAdapter(vendorAdapter);
    return em;
}
@Bean
public PlatformTransactionManager transactionManager(
        EntityManagerFactory emf){
    JpaTransactionManager transactionManager = new JpaTransactionManager();
    transactionManager.setEntityManagerFactory(emf);
    return transactionManager;
}

但现在我有一个案例,我想使用 EntityManager 的 create 方法。当我使用 Jpa 存储库并且没有具体的类时,我如何获取它的实例以及在哪里实现这些方法?

我正在使用扩展 JpaRepository 的存储库:

public interface MyRepository extends JpaRepository<Chat, Integer> {
}

然后在我的服务中使用它:

@Service
public class MyServiceImpl implements MyService {
    private MyRepository myRepository;

    public MyServiceImpl(MyRepository myRepository) {
        this.myRepository = myRepository;
    }

我是否应该创建一个实现 MyRepository 的抽象类,这样我就不必实现所有 JpaRepository 的方法并在那里获取 EntityManager 的实例,我该怎么做?

【问题讨论】:

  • 但现在我有一个案例,我想使用 EntityManager 的 create 方法 也许你想展示一下你会如何使用它?
  • @pirho 我只想使用 EntityManager 的创建方法而不是工厂的保存。在数据库中创建实体非常简单。使用 Jpa 存储库保存方法将创建或更新,因此如果数据库中已有实体,则不会引发异常。
  • create() = persist()?

标签: java spring hibernate jpa entitymanager


【解决方案1】:

通常您只需在需要的地方注入EntityManager。喜欢:

@PersistenceContext
private EntityManager em;

只需使用方法persist(..) 就像:

em.persist(myChatObject);

所以不需要任何特殊处理。

【讨论】:

    猜你喜欢
    • 2023-04-11
    • 2012-01-27
    • 2012-05-25
    • 2023-03-23
    • 2018-01-20
    • 1970-01-01
    • 2011-07-19
    • 2014-05-16
    • 2012-02-11
    相关资源
    最近更新 更多