【问题标题】:Spring-boot and Hibernate: How to flush data?Spring-boot 和 Hibernate:如何刷新数据?
【发布时间】:2019-09-06 14:06:42
【问题描述】:

我的 spring-boot + hibernate 和我的数据库有问题。 当我使用 CrudRepository.save(...) 保存实体时,有时我的实体仅从 JPA 保存,但它不在数据库中。

以为没有设置刷新模式,我将以下配置放在 application.yaml 中,但它没有改变任何东西。可能没有设置模式?

spring:
   liquibase:
      enabled: true
      change-log: classpath:db/changelog/db.changelog-master.xml
   datasource:
      url: jdbc:postgresql://localhost:26257/mydb?sslmode=disable
      username: myuser
   jpa:
      properties:
         hibernate:
            dialect: org.hibernate.dialect.PostgreSQL94Dialect
            flushMode: ALWAYS
         org:
            hibernate:
              flushMode: ALWAYS
      show-sql: true
      database-platform: org.hibernate.dialect.PostgreSQL94Dialect
      hibernate:
         ddl-auto: create
logging:
   level:
      org.hibernate.SQL: DEBUG
      org.hibernate.engine.jdbc.env.internal.LobCreatorBuilderImpl: ERROR
      org.hibernate.type.descriptor.sql.BasicBinder: TRACE
server:
  port: 8081
@Repository
public interface PermissionRepository extends CrudRepository<Permission, Integer> {

}

有什么想法吗? 谢谢:)

【问题讨论】:

    标签: database hibernate spring-boot jpa


    【解决方案1】:

    首先,我在application.yml 中看到您使用 liquibase,这让我认为您使用它来管理您的数据库。 Soo,首先你不应该设置spring.jpa.hibernate.ddl-auto 来创建,而是validate,我认为。 :)

    如果您向我们展示实体/实体以及使用 crudrepository 的方法,那就太好了。

    所以,这取决于您的实体,即是否存在任何 @OneToMany 或 @ManyToOne 关系? 你使用事务管理器吗?

    关于jpa hibernate flushMode settings: 这完全取决于您如何引导 Hibernate。 实体查询应使用默认的 flushMode (AUTO) 在旧模式和 JPA 模式上触发刷新。

    In addition, maybe you should read this ticket as well with the answer of Vlad Mihalcea.

    【讨论】:

      猜你喜欢
      • 2019-06-10
      • 2020-07-18
      • 2017-10-01
      • 1970-01-01
      • 2014-12-30
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 1970-01-01
      相关资源
      最近更新 更多