繁体   English   中英

Spring-boot和Hibernate:如何刷新数据?

[英]Spring-boot and Hibernate: How to flush data?

我在使用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> {

}

任何想法? 谢谢 :)

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

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

因此,这取决于您的实体,即是否存在@OneToMany或@ManyToOne关系? 您是否使用transactionManager?

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

此外,也许您也应该阅读弗拉德·米哈尔西娅(Vlad Mihalcea)的答案的这张票。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM