したがって、spring-data
は、複雑なクエリに役立つ特別な魔法を実行します。最初は奇妙で、ドキュメント内でそれを完全にスキップしますが、それは本当に強力で便利です。
これはカスタムRepository
とカスタムの `RepositoryImpl 'を作成し、Springにどこにそれを見つけるかを伝えます。次に例を示します。
Configurationクラス - あなたのリポジトリのパッケージを指して注釈を使用して、まだ、必要なXML設定からポイント(それが自動的に今*Impl
クラスを検索する):
@Configuration
@EnableJpaRepositories(basePackages = {"com.examples.repositories"})
@EnableTransactionManagement
public class MyConfiguration {
}
JPA-リポジトリ.xml - Spring
にリポジトリの場所を教えてください。またCustomImpl
ファイル名を指定して、カスタム・リポジトリを探すためにSpring
を伝える:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">
<jpa:repositories base-package="com.example.repositories" repository-impl-postfix="CustomImpl" />
</beans>
MyObjectRepository
- あなたは注釈付きと注釈なしクエリメソッドを置くことができる場所です。このリポジトリインターフェースはCustom
1を拡張する方法注:
@Transactional
public interface MyObjectRepository extends JpaRepository<MyObject, Integer>, MyObjectRepositoryCustom {
List<MyObject> findByName(String name);
@Query("select * from my_object where name = ?0 or middle_name = ?0")
List<MyObject> findByFirstNameOrMiddleName(String name);
}
MyObjectRepositoryCustom
- より複雑であり、単純なクエリまたは注釈で扱うことができないリポジトリ方法:
public interface MyObjectRepositoryCustom {
List<MyObject> findByNameWithWeirdOrdering(String name);
}
MyObjectRepositoryCustomImpl
- 実際にこれらのメソッドをオートワイヤードで実装するところEntityManager
:
public class MyObjectRepositoryCustomImpl implements MyObjectRepositoryCustom {
@Autowired
private EntityManager entityManager;
public final List<MyObject> findByNameWithWeirdOrdering(String name) {
Query query = query(where("name").is(name));
query.sort().on("whatever", Order.ASC);
return entityManager.find(query, MyObject.class);
}
}
驚くべきことに、このすべてが一緒に来て、両方のインターフェイスからのメソッド(およびCRUDインタフェース、あなたが実装する)すべてはあなたが行うときに表示:
myObjectRepository.
あなたが表示されます。
myObjectRepository.save()
myObjectRepository.findAll()
myObjectRepository.findByName()
myObjectRepository.findByFirstNameOrMiddleName()
myObjectRepository.findByNameWithWeirdOrdering()
それ本当にうまくいく。また、クエリ用のインターフェイスも1つ用意されています。 spring-data
は本当に大規模なアプリケーションに対応しています。また、より多くのクエリーをシンプルまたはアノテーションにプッシュするだけで、より良い結果が得られます。
これはすべてSpring Data Jpa siteに記載されています。
幸運。
私が知る限り、それはほとんど違いがありません。あなたがより快適なものを持って行きなさい。なぜ議論? – duffymo
私は明らかにHibernateの方が快適ですが、同じことをして生産性を上げることができれば、より新しいアプローチを採用したいと思います。しかし、Hibernateがさらに強力で問題が少なくなる場合、それは私が知りたいことです。 – egervari
JPAは、多くの実装の1つとしてHibernateを使用するORMの一般化です。あなたはどんな力を相手に与えているのですか? JPAは標準ですが、私は2つの違いはほとんどありません。完全な開示のために、私はどちらかを気にしないと言います。どちらもSQLを生成します。私はむしろそれを自分で書くだろう。 ORMはすべての問題とすべてのユーザーのためのものではありません。 – duffymo