【发布时间】:2017-08-11 12:57:50
【问题描述】:
我们正在针对现有数据库编写一个新应用程序。我正在使用 Spring Data JPA,并且只是在做一个
MyRepository.save()
在我的新实体上,使用
MyRepository extends CrudRepository<MyThing, String>
我在日志中注意到,hibernate 在插入之前执行了一个选择,并且它们需要很长时间,即使在使用索引时也是如此。
我在这里搜索过这个,answers I've found 通常与 Hibernate 相关。我对 JPA 很陌生,看起来 JPA 和 Hibernate 非常紧密地交织在一起,至少在 Spring Data 的上下文中使用它时是如此。链接的答案建议使用 Hibernate persist(),或者以某种方式使用会话,可能来自 entityManager?我不必直接对会话或实体管理器或任何 Hibernate API 做任何事情。到目前为止,我已经在我的存储库中使用 save() 和几个 @Query 完成了简单的插入操作。
【问题讨论】:
-
您是否在为您的实体使用自动生成的 ID?
-
没有。我们看到这发生在 2 张桌子上。其中一个主键只有一个字段,我们实际上是从另一个预先生成的数字表中获得的。我正在为该表使用一个简单的 ID。另一个是复合 Id,我使用的是 EmbeddedId
-
能够看到你引用的sql日志会很有用。
-
@Gimby 你具体在找什么,我怎样才能得到它?是否有一个日志级别和 jpa/hibernate 包我可以设置得更详细?我们使用 application.yml 进行配置;它当前正在记录它正在使用的生成的 sql;我实际上只是拿了那个 sql 并在 dbvisualizer 中运行它;它立即在 dbvisualizer 中运行,但在应用程序中运行时需要几秒钟
-
是的,生成的SQL。一般来说,当你在谈论某件事时,你实际上是在展示它,这是一个好主意。您的实体代码也是如此。
标签: java spring hibernate spring-data-jpa