JPA Native Query
2352 ワード
Native Queryを使いましょうネイティブクエリでは、JPQLとは異なるEntityプロパティは使用できません. select*from bookのように、テーブル名が含まれています.他のカラム名を記入する場合は、DB Tableで使用するカラム名も記入します. の現業では、本機のクエリーを最小限に抑えることが望ましい.実行中またはテスト中にエラーが発生する可能性があるためです.では、いつネイティブクエリーを使用しますか? の1つ目は、パフォーマンスに問題がある場合に使用することです.deleteAllは、すべてのカラムをクエリーし、削除するパフォーマンスホットスポットをクエリーします.だから出てきたのはdeleteAllInBatchかdeleteInBatchしかしupdateクエリーはありません.だからクエリーごとに更新します.上記のコードの本を次々と「ITプロフェッショナル」カテゴリに貼ると、パフォーマンスの問題が発生します.したがってdeleteAllInBatchのように一度に完了したクエリー(「update book set category=「ITプロフェッショナル」)と言える.この場合、Nativeクエリが役立ちます.
-重要なのは、DML操作で@Moduffingをupdateクエリとしてマークすることです.
-交通手段も必要だNativeクエリは@Transactionalを直接宣言する必要があります.
-ただし@TransactionalはSpringで特定のクラスに対して@Transactionalを行う傾向があります. 第は、JPAが基本的にサポートしていない機能を使用する場合に使用される.上のリストshowTable()同じ状況でもそうです.では、特殊な形式のクエリーもクエリーできます.
@Query(value = "select * from book", nativeQuery = true)
List<Book> findAllCustom(); //
@Transactional
@Modifying
@Query(value = "update book set category = 'IT전문서'", nativeQuery = true)
int updateCategories();
@Query(value = "show tables", nativeQuery = true)
List<String> showTables();
@Test
void nativeQueryTest() {
// bookRepository.findAll().forEach(System.out::println);
// bookRepository.findAllCustom().forEach(System.out::println);
List<Book> books = bookRepository.findAll();
for (Book book : books) {
book.setCategory("IT전문서");
}
bookRepository.saveAll(books);
System.out.println(bookRepository.findAll());
System.out.println("affected rows : " + bookRepository.updateCategories());
bookRepository.findAllCustom().forEach(System.out::println);
System.out.println(bookRepository.showTables());
}
-重要なのは、DML操作で@Moduffingをupdateクエリとしてマークすることです.
-交通手段も必要だNativeクエリは@Transactionalを直接宣言する必要があります.
-ただし@TransactionalはSpringで特定のクラスに対して@Transactionalを行う傾向があります.
Reference
この問題について(JPA Native Query), 我々は、より多くの情報をここで見つけました https://velog.io/@stpn94/JPA-Native-Queryテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol