質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

4回答

5741閲覧

Spring Boot PageRequestが使えない

isisisimylife

総合スコア42

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/02/02 15:04

編集2020/02/03 04:31

実現したいこと

Spring DataのPageableを用いてDBからページング処理を実現したいです。

発生している問題・エラーメッセージ

PageRequestを使おうとすると次のようなエラーメッセージが表示されます。

Error: java: PageRequest(int,int,org.springframework.data.domain.Sort)はorg.springframework.data.domain.PageRequestでprotectedアクセスされます

該当のソースコード

java

1import org.springframework.data.domain.Page; 2import org.springframework.data.domain.PageRequest; 3import java.awt.print.Pageable; 4import org.springframework.data.domain.Sort; 5~~ 6Pageable pageable = new PageRequest(0, 3, Sort.unsorted()); 7Page<Customer> page = customerRepository.findAllByName(pageable);

###pom.xml

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>hajiboot-jpa</artifactId> <version>0.0.1-SNAPSHOT</version> <name>hajiboot-jpa</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.lazyluke</groupId> <artifactId>log4jdbc-remix</artifactId> <version>0.2.7</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>

###CustomerRepository.java

java

1package com.example.hajibootjpa.repository; 2 3import com.example.hajibootjpa.domain.Customer; 4import org.springframework.data.domain.Page; 5import org.springframework.data.domain.Pageable; 6import org.springframework.data.jpa.repository.JpaRepository; 7import org.springframework.data.jpa.repository.Query; 8 9import java.util.List; 10 11public interface CustomerRepository extends JpaRepository<Customer, Integer> { 12 @Query("SELECT x FROM Customer x ORDER BY x.firstName, x.lastName") 13 Page<Customer> findAllByName(Pageable pageable); 14} 15

試したこと

ネットで調べて"PageRequest.of()"を使おうとしたのですが、これまたエラーとなりました。

Error:java: シンボルを見つけられません シンボル: クラス of 場所: クラス org.springframework.data.domain.PageRequest

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rubytomato

2020/02/03 03:46

以下の点、ご確認のうえ質問内容に追記ください。 1) pom.xml (Mavenプロジェクト) or build.gradle (Gradleプロジェクト) のファイル内容 2) 実装したリポジトリのソースコード (CustomerRepository ?)
guest

回答4

0

基本的に、自分で作らない方をお勧めする。

java

1import org.springframework.data.domain.Pageable; 2import org.springframework.data.web.PageableDefault;

java

1 /** 2 * index ページ用. 3 * 4 * @param request リクエスト情報. 5 * @return 画面表示用ワード(テンプレート、リダイレクト). 6 */ 7 @GetMapping(PATH_INDEX) 8 public String index(HttpServletRequest request, 9 @PageableDefault(page = 0, size = 10, sort = { "id" }) Pageable pageable) {

投稿2020/02/03 12:15

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

isisisimylife

2020/02/03 12:50

回答ありがとうございます!
guest

0

PageRequestのコンストラクタは、非推奨(代わりにPageRequest.ofを使う)になった後にprotectedに変更されました。
おそらく参考にした情報が古いバージョンのものだったと思われます。

投稿2020/02/03 07:47

YukiYoshida

総合スコア93

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

isisisimylife

2020/02/03 12:50

回答ありがとうございます!
guest

0

ベストアンサー

Error: java: PageRequest(int,int,org.springframework.data.domain.Sort)はorg.springframework.data.domain.PageRequestでprotectedアクセスされます

このエラーは、YukiYoshidaさんの回答の通りです。
Spring Dataのバージョンが2.0になったときに非推奨となり、ofメソッドが追加されました。
2.1までは非推奨ながら使用できたのですが、バージョン2.2でコンストラクタがprotectedに変更されたので、従来の使い方はできません。

お使いのSpring Data JPAのバージョンは2.2.4なので、ofメソッドを使うことになります。

Error:java: シンボルを見つけられません

シンボル: クラス of
場所: クラス org.springframework.data.domain.PageRequest

下記のようにnewでインスタンスを生成しようとすると、このエラーが発生します。

java

1Pageable pageable = new PageRequest.of(0, 3, Sort.unsorted());

ofはstaticメソッドなのでnewは不要です。なので正しくは下記のようになります。

java

1Pageable pageable = PageRequest.of(0, 3, Sort.unsorted());

以下は補足です。参考までにご覧ください。
このようにソートもPageRequestのインスタンスに持たせることができるので

java

1Pageable pageable = PageRequest.of(0, 3, Sort.by("firstName", "lastName").ascending());

リポジトリの方でクエリを書く必要はなくなります。

java

1public interface CustomerRepository extends JpaRepository<Customer, Integer> { 2 // @Query("SELECT x FROM Customer x ORDER BY x.firstName, x.lastName") ← 不要 3 Page<Customer> findAllByName(Pageable pageable); 4}

また、検索条件が不要ならfindAll(Pageable pageable)というメソッドが既に定義されているので、追加しているfindAllByNameメソッドも不要です。

java

1public interface CustomerRepository extends JpaRepository<Customer, Integer> { 2 // @Query("SELECT x FROM Customer x ORDER BY x.firstName, x.lastName") ← 不要 3 // Page<Customer> findAllByName(Pageable pageable); ← 不要 4}

リポジトリを使う側のコードは最終的に下記のようになると思います。

java

1Pageable pageable = PageRequest.of(0, 3, Sort.by("firstName", "lastName").ascending()); 2Page<Customer> page = customerRepository.findAll(pageable);

投稿2020/02/03 12:19

rubytomato

総合スコア1752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

isisisimylife

2020/02/03 12:49

回答ありがとうございます。 バージョンによる影響でPagerequeatが使えなかった理由と、ofをnewで呼んでいたので使えなかったという点 をとても分かりやすく教えてくださったのでベストアンサーとさせていただきます。ありがとうございました。
guest

0

まず、質問に対してお応えできず、すみません。
この質問と同じコードを作成しているものです。
下記のエラーが出てしまい、解決策を教えてくださる方を探しています。
どうぞよろしくお願い致します。
4つともに共通する部分は「CustomerRepository」です。

Java

1Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'hajibootJpaApplication': Unsatisfied dependency expressed through field 'customerRepository'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerRepository' defined in com.example.hajibootjpa.repository.CustomerRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract org.springframework.data.domain.Page com.example.hajibootjpa.repository.CustomerRepository.findAllorderByName(org.springframework.data.domain.Pageable)! No property name found for type Customer! 2 3Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'customerRepository' defined in com.example.hajibootjpa.repository.CustomerRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract org.springframework.data.domain.Page com.example.hajibootjpa.repository.CustomerRepository.findAllorderByName(org.springframework.data.domain.Pageable)! No property name found for type Customer! 4 5Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract org.springframework.data.domain.Page com.example.hajibootjpa.repository.CustomerRepository.findAllorderByName(org.springframework.data.domain.Pageable)! No property name found for type Customer! 6 7Caused by: org.springframework.data.mapping.PropertyReferenceException: No property name found for type Customer!

投稿2021/01/16 07:34

t.ooishi

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問