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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Spring Boot

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

Q&A

解決済

1回答

1570閲覧

Spring Boot : 複合主キーのエンティティクラス、リポジトリを作成したい

sekaharu

総合スコア0

Spring Boot

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

0グッド

0クリップ

投稿2020/09/19 09:50

実行環境
・MacBook 10.15.6
・Spring Tool Suite 4 Version: 4.5.1.RELEASE
・postgresql 7.4

前提・実現したいこと

(未経験転職してspringを学習するために自分でアプリを作成している初心者です。)
複合主キーのテーブルのエンティティクラス、リポジトリインターフェイスの作成をしたいです。

まずgoogleで検索して、見つけた記事を参考に進めましたが、500エラーになってしまいました。
コードは下記になります。

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

2020-09-19 18:12:20.322 ERROR 6326 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.data.mapping.PropertyReferenceException: No property userId found for type Post!] with root cause org.springframework.data.mapping.PropertyReferenceException: No property userId found for type Post!

該当のソースコード

java

1//エンティティクラス(Post.java) 2package com.posts.model; 3 4import com.posts.model.PostPK; 5import javax.persistence.Entity; 6import javax.persistence.Id; 7import javax.persistence.EmbeddedId; 8import javax.persistence.IdClass; 9import javax.persistence.Table; 10import javax.persistence.Column; 11 12@Entity 13@Table(name = "hppost") 14public class Post { 15 16 @EmbeddedId 17 private PostPK postPK; 18 19 @Column(name = "body") 20 private String body; 21 22 public String getBody() { 23 return body; 24 } 25 public void setBody(String body) { 26 this.body = body; 27 } 28}

java

1//プライマリーキークラス(PostPK.java) 2package com.posts.model; 3 4import java.io.Serializable; 5import javax.persistence.Column; 6import javax.persistence.Embeddable; 7 8@Embeddable 9public class PostPK implements Serializable { 10 11 private static final long serialVersionUID = 1L; 12 13 @Column(name = "userId") 14 private int userId; 15 16 @Column(name = "createdatetime") 17 private String createDateTime; 18 19 public Integer getUserId() { 20 return userId; 21 } 22 public void setUserId(int userId) { 23 this.userId = userId; 24 } 25 public String getCreateDateTime() { 26 return this.createDateTime = (String)createDateTime; 27 } 28 public void setCreateDateTime(String createDateTime) { 29 this.createDateTime = createDateTime; 30 } 31} 32

java

1//リポジトリインターフェイス(PostsRepository.java) 2package com.posts.model; 3 4import org.springframework.data.jpa.repository.JpaRepository; 5import org.springframework.stereotype.Repository; 6 7import com.posts.model.Post; 8import com.posts.model.PostPK; 9 10@Repository 11public interface PostsRepository extends JpaRepository<Post, PostPK> { 12 13} 14

試したこと

・プライマリーキークラスを作成して、複合主キーのカラムはそちらで記述(@Embeddableアノテーションをつける)。
・エンティティクラスで、プライマリーキークラスを@EmbeddedIdアノテーションつけてフィールドに持つ。
・リポジトリインターフェイスで、JpaRepositoryの第2引数にプライマリーキークラスを指定.

を行いました。
しかし、うまくいかなかったのでさらに調べてみると、
「プライマリキークラスではequalsとhashCodeメソッドを定義する」と言う内容を記事で見つけましたが、どう記述すればいいのか分かりませんでした。
上記の修正すべき箇所と、equalsとhashCodeメソッドの記述方法を知りたいと思いご質問させていただきました。

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

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

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

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

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

mr-hisa-child

2020/09/19 11:37

1点気になったので質問させてください。 テーブルのカラム名ですが、userIdだけキャメルケースですが、これは正しいでしょうか?
sekaharu

2020/09/19 14:27 編集

ご質問ありがとうございます。 命名規約としてカラム名をキャメルケースで記述することにしています。 以下SQL文でテーブル作成いたしました。 CREATE TABLE hppost ( userId integer NOT NULL, body VARCHAR(255), createDateTime TIMESTAMP NOT NULL, PRIMARY KEY(userId, createDateTime) ); 複合主キーの@Column(name = "createdatetime")が間違えていたことに気付きました、、 修正しましたが、以前同じエラーです。。 (エラー文的にuserIdがおかしいのかと思って見ているのですが、どうにもエラーが解消されません‥)
guest

回答1

0

自己解決

実行環境などを変えて一から作成して解決いたしました
ですので解決済みとさせていただきます

投稿2021/03/28 06:50

sekaharu

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問