以下のページを参考にコードを書いておりました。

[【Spring Boot】PostgreSQLに接続してDBのデータを取得する【Spring Boot ハンズオン第2回】](https://uha-
blog.com/java/spring-boot-postgresql/)

`http://localhost:8080/book-list` にブラウザからアクセスすると次のエラーが出ます。

```

    EL1008E: Property or field 'id' cannot be found on object of type 'com.uhablog.model.Book' - maybe not public or not valid?
    
```

### 試したこと

  1. html内の`<td th:text="*{id}"></td>を<td th:text="*{book.id}"></td>`のように変更する  
→`EL1008E: Property or field 'id' cannot be found on object of type
'com.uhablog.model.Book' - maybe not public or not valid?`

  2. Book.java内のフィールドをprivateからpublicへ変更する  
→期待通りのページが表示される

[Accessing Data with JPA](https://spring.io/guides/gs/accessing-data-
jpa/)でもprivateとしており、なぜpublicではエラーが出るのかわからないためアドバイスをいただきたいです。

環境：  
OS: Windows11  
Editor: Eclipse  
Browser: Google Chrome

**追記**  
コードは以下の通りです。

Book.java

```

    @Data
    @Entity
    @Table(name = "booksinfo")
    public class Book {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
            // 本のidを保持するフィールド
            private Integer id;
        
            @Column(name = "title")
            // 本のタイトルを保持するフィールド
            private String title;
        
            @Column(name = "price")
            // 本の値段を保持するフィールド
            private Integer price;
        }
    
```

BookRepository.java

```

    public interface BookRepository extends
            JpaRepository<Book, Integer> {
    }
    
```

BookService.java

```

    @Service
    @Transactional
    public class BookService {
    
        @Autowired
        BookRepository repository;
    
        /**
         * データベースから本の一覧を取得する
         * 
         * @return
         */
        public List<Book> findAll() {
            return repository.findAll();
        }
    }
    
```

BookController.java

```

    @Controller
    public class BookController {
    
        @Autowired
        BookService service;
    
        @GetMapping("/book-list")
        public String bookList(Model model) {
    
            // serviceを使って、本の一覧をDBから取得する
            List<Book> bookList = service
                    .findAll();
            // modelに本の一覧を設定して、画面に渡す
            model.addAttribute("bookList",
                    bookList);
            // bookList.htmlの表示
            return "bookList";
        }
    }
    
```
CC BY-SA 4.0
2023-05-19T18:08:36.737
94913
2023-05-22T00:16:23.810
2023-05-22T00:16:23.810
3060
30396
question
spring spring-boot thymeleaf jpa
エラーEL1008E: Property or field 'id' cannot be found on object of type がでる
おそらく`Book` のフィールドに対する getter が実装されていないのでしょう。  
リンク先のコードでいうと

```

    @Data
    @Entity
    @Table(name = "booksinfo")
    public class Book {
    // 後略
    
```

の、 [`@Data`](https://projectlombok.org/features/Data) を書き漏らしているのではないでしょうか。

* * *

問題が再現するコードを載せるべきです。  
リンク先サイトの通りに実装できているのであればエラー無く実行できるはずなので、問題は質問者が実装したコードにあるはずです。それ無しに参考元(正しいコード)だけ示されても普通はわかりません。  
(もう少しいうと、質問文が推敲されていないように思われます)

* * *

Lombok
の[セットアップがEclipse](https://projectlombok.org/setup/eclipse)に対して行われていないのだ考えられます。  
[質問文中にあるリンク先の解説](https://uha-blog.com/java/eclipse-install/)では Pleiades All in
One を利用しているようですが、おそらくこのパッケージには最初からLombokが入っているのでしょう。  
素の Eclipse では自身でセットアップする必要があります。

検索すると日本語解説もヒットする([例](https://qiita.com/ponsuke0531/items/c2dac01e444f510310ae))ので、それらを参考にして、EclipseにLombokをセットアップしてください。

  1. [`lombok.jar`](https://projectlombok.org/download) をダウンロードする
  2. `java -jar lombok.jar` コマンドでインストールダイアログを起動する
  3. eclipse のディレクトリを指定してセットアップ処理を実行する
CC BY-SA 4.0
2023-05-19T21:36:43.783
94917
2023-05-21T22:01:36.253
2023-05-21T22:01:36.253
2808
2808
94913
answer
1. Lombokがインストールされているか確認する
  2. @Dataを@Setter, @Getterで書き換えてみる
  3. Setter, Getterを@Dataに戻す
  4. Outline Viewにセッター、ゲッターが表示されればOK
CC BY-SA 4.0
2023-05-20T17:40:50.290
94925
2023-05-20T17:40:50.290
30396
94913
answer