2017-06-07 13 views

答えて

2

HibernateのSession.save()は、JPAには存在しない独自のHibernate操作です。基本的にはEntityManager.persist()と同じことをしますが、IDが生成されて返されることを保証します。同じカスケードは適用されません。なぜなら、HibernateにはもちろんJPAに存在する独自のSAVEカスケードオプションがあるからです。

Spring-data-jpaのSimpleJpaRepositoryの保存操作では、エンティティが新規と見なされる場合はEntityManager.persist()、エンティティが新規と見なされる場合はEntityManager.merge()が呼び出されます。

だから、同じものではなく、同じように動作しません。

2

JPA、Hibernate、およびSpring Data JPAの関係が正確にわかっている場合は、この方が理解しやすいでしょう。

JPA(Java Persistence API)は、JavaでORM(object-relational mapping)を実行するための標準インタフェース仕様です。インターフェイス自体を実装するわけではないことに注意してください。ソフトウェアで使用するには、JPA仕様を実装するライブラリが必要です。

HibernateはJPAの実装であり、JPA仕様を実装するライブラリです。

Spring Data JPAはSpring Frameworkのサブプロジェクトであり、JPAを使用してSpringフレームワークの残りの部分に統合することを容易にします。

Spring Data JPAを使用する場合は、プロジェクト内にJPAの実装(Hibernateなど)も必要です。

Spring Data JPAが提供するインターフェイスとクラスを使用し、実際にデータベースと通信するJPA実装(Hibernate)と通信します。

Spring Dataからエンティティを保存するJPAは最終的にHibernateを呼び出してエンティティを保存します。したがって、最終的には同じ効果が得られます。

ただし、Spring Data JPAを使用している場合は、Hibernateを直接使用するべきではありません。実際には、自分のコードでHibernateに直接参照することは一切ありません。コード内でHibernateを直接使用すると、Spring Data JPAを完全にバイパスできます。

関連する問題