実行環境
・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メソッドの記述方法を知りたいと思いご質問させていただきました。
回答1件
あなたの回答
tips
プレビュー