【问题标题】:Add Hibernate to SpringBoot project将 Hibernate 添加到 Spring Boot 项目
【发布时间】:2023-04-09 07:11:01
【问题描述】:

我有一个简单的 Spring Boot 项目(这里已经提到:Replace hsqldb with MySQL

我想配置 Hibernate 来处理这个项目。在另一个项目中,我曾经像这样获得 EntityManager:

@PersistenceContext(unitName = "orm-unit")
private EntityManager em;

但我也有带有所需配置的 persistence.xml。

在 Spring Boot 中,我什至不知道在哪里放置任何配置文件。 在这种情况下如何让 Hibernate 工作?

【问题讨论】:

    标签: java mysql spring hibernate


    【解决方案1】:

    阅读 Spring Boot 文档。查看31. Working with SQL databases 你会发现你需要配置一个DataSource。

    DataSource 配置由外部配置控制 spring.datasource.* 中的属性。例如,您可以声明 application.properties 中的以下部分:

    spring.datasource.url=jdbc:mysql://localhost/test
    spring.datasource.username=dbuser
    spring.datasource.password=dbpass
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver
    

    您还可以在实现 EnvironmentAware 的 @Configuration 映射类中配置数据源。

    JHipster 使用 HikariCP 生成一个很酷的数据库配置。您可以查看the sample here

    对于 Hibernate,您可以configure JPA properties。 您可以显式设置 spring.jpa.hibernate.ddl-auto,标准 Hibernate 属性值为none, validate, update, create, create-drop。 Spring Boot 会根据它是否认为您的数据库是嵌入式的(默认 create-drop)(默认为无)为您选择一个默认值。

    例如,要创建和删除表,您可以将以下内容添加到 application.properties。

    spring.jpa.hibernate.ddl-auto=create-drop
    

    对于 EntityManager,当您 EnableAutoConfiguration 时,您将触发 JpaBaseConfiguration,它将为您创建一个实体管理器。

    您也可以使用自定义的 EntityManagerFactory。

    要完全控制 EntityManagerFactory 的配置, 您需要添加一个名为“entityManagerFactory”的@Bean。弹簧靴 自动配置根据 存在该类型的 bean。

    顺便说一句,你也可以使用传统的 persistence.xml

    【讨论】:

    • 我已经让它工作了。我可以在 MySQL 中使用 spring 存储库(请参阅我之前的帖子的链接)我现在想要的是纯 Hibernate 和 EntityManager
    • 它现在以某种方式工作,我有:目标工厂的共享 EntityManager 代理 [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@351e8433] 而不是 NullPointer,这很棒!但有一件事不起作用:当我调用 persist() 时没有任何反应,之后我尝试调用 flush() 但后来我有: javax.persistence.TransactionRequiredException: 没有正在进行的事务。我也有 spring.jpa.hibernate.ddl-auto: create-drop
    • 我想你可能需要@EnableTransactionManagement。
    • 它没有用。但是,我也尝试使用 EntityTransaction,这就是我得到的:“不允许在共享 EntityManager 上创建事务 - 改用 Spring 事务或 EJB CMT”,persistance.xml 怎么样,我已经准备好了,只是放在哪里?
    • 我将@Transactional 添加到我调用persist() 并且我工作的方法中:) 出于某种原因,每次我重新启动应用程序时,前一次午餐中的数据库记录都会被清除,我开始一个空的数据库。知道为什么吗?编辑:spring.jpa.hibernate.ddl-auto: update 可以解决问题:) 也感谢您对 Laurentiu 的帮助,我非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2021-04-10
    • 1970-01-01
    • 2012-06-12
    • 2021-09-26
    • 1970-01-01
    • 2018-06-24
    • 2017-03-19
    • 2021-04-01
    相关资源
    最近更新 更多