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

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

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

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

Q&A

解決済

1回答

6419閲覧

エラー does not exist

Yoshi--

総合スコア62

Java

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

0グッド

0クリップ

投稿2017/07/05 03:52

編集2017/07/05 04:31

Profile.java

java

1//profileテーブルとマッピングさせる 2 3package com.example.konkatsu.domain; 4 5import java.sql.Date; 6 7import javax.persistence.Entity; 8import javax.persistence.FetchType; 9import javax.persistence.GeneratedValue; 10import javax.persistence.Id; 11import javax.persistence.JoinColumn; 12import javax.persistence.ManyToOne; 13import javax.persistence.Table; 14 15import lombok.AllArgsConstructor; 16import lombok.Data; 17import lombok.NoArgsConstructor; 18 19@Data 20@NoArgsConstructor //デフォルトコンストラクタも必要な場合 21@AllArgsConstructor //すべてのフィールドを引数に持つコンストラクタを自動生成 22@Entity //エンティティ(一単位として扱われるデータのまとまり)であることを示す。指定したクラス名がテーブルとマッピングされる 23@Table(name = "profile") //接続するテーブルを指定 24//@ToString(exclude = "users") //Userクラスには対応するProfileクラスのフィールドを追加 25public class Profile { 26 @Id //主キー 27 @GeneratedValue //自動採番される 28 private Integer id; 29 private Integer genderId; 30 private String name; 31 private Date birthday; 32 private Integer height; 33 private Integer occupationId; 34 private Integer income; 35 private String text; 36 private byte[] image; 37 @ManyToOne(fetch = FetchType.LAZY) //@ManyToOneで多対1の関係にする 38 @JoinColumn(nullable = true, name = "user_id") //外部キーのカラム名の指定 39 private User user; 40} 41

User.java

java

1package com.example.konkatsu.domain; 2 3import java.util.List; 4 5import javax.persistence.CascadeType; 6import javax.persistence.Entity; 7import javax.persistence.FetchType; 8import javax.persistence.GeneratedValue; 9import javax.persistence.Id; 10import javax.persistence.OneToMany; 11import javax.persistence.Table; 12 13import lombok.AllArgsConstructor; 14import lombok.Data; 15import lombok.NoArgsConstructor; 16import lombok.ToString; 17 18@Data //getterメソッド・setterメソッドをコード上に直接書かなくて済む 19@NoArgsConstructor 20@AllArgsConstructor 21@Entity //JPAに管理してもらう 22@Table(name = "users") //接続するテーブルを指定 23@ToString(exclude = "profile") 24public class User { 25 26 @Id //変数idをプライマリーキーに指定 27 @GeneratedValue //自動採番される 28 private Integer userId; 29 private String mail; 30 private String pass; 31 @OneToMany(fetch = FetchType.EAGER, cascade= CascadeType.ALL, mappedBy = "user" ) //Usersとprofileを1対多の関係にするため@OneToManyをつけるcascade = CascadeType.ALLを設定することでUserの操作をprofileにも伝播できる 32 private List<Profile> profile; 33 34}

Profileテーブル
イメージ説明

Usersテーブル
イメージ説明

イメージ説明

これで実行すると
コンパイルは問題なく通るのですが
http://localhostでアクセスすると

org.postgresql.util.PSQLException: ERROR: column profile0_.id does not exist

とidがありませんという様な
エラーが出てしまいます

マッピングのやり方が間違っていると思うのですが
どうしても解決できません

アドバイスがありましたらお願いいたします

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

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

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

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

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

guest

回答1

0

ベストアンサー

Profileのエンティティクラスで、主キー(@Id)のフィールドで「id」を持っていますが、
実テーブルにはidという列がないためです。

ちなみにProfileテーブルにおける主キーは何でしょうか?
もし、user_idにマッピングさせたい場合は、@Columnを使用します。
@Columnがない場合は、FW側で列名のキャメルケース型のフィールドにマッピングします。
そのため、それに該当しない場合は、明示的に列名を指定してあげる必要があります。

java

1@Column(name="user_id") 2@Id 3private Integer id;

投稿2017/07/05 04:29

編集2017/07/05 04:30
mr-hisa-child

総合スコア294

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

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

Yoshi--

2017/07/05 04:31

返信ありがとうございます! Profileテーブルにおける主キーはuser_idでございます。
Yoshi--

2017/07/05 04:32

ER図を追加いたしました
mr-hisa-child

2017/07/05 04:36 編集

追加ありがとうございます。 user_idでしたら、上記の回答に記載したやり方でできると思います。 ちなみに、Profileのデータの画像が載せてありますが、 名前がリアルなので気になりましたが、テストデータですよね? 個人情報なので、もし実名なのであればマスキングなどの対応が必要です。
Yoshi--

2017/07/05 04:39

テストデータなので実在しないデータです。
Yoshi--

2017/07/05 04:39

上記の回答に記載したやり方で実行すると Repeated column in mapping for entity: com.example.konkatsu.domain.Profile column: user_id (should be mapped with insert="false" update="false") というエラーになってしまいました
mr-hisa-child

2017/07/05 04:47

エラーの内容を試してみてはいかがでしょう?
Yoshi--

2017/07/05 04:54

@JoinColumn(nullable = true, name = "user_id", insertable=false, updatable=false ) とつけたら動きました!! これってどういう意味なのですか??
mr-hisa-child

2017/07/05 05:16

そこは自分で調べていただきたいですが、、、。 簡単にいうと、「Profileの登録、または更新時にUserの登録、更新は行いませんよ。」という意味です。
Yoshi--

2017/07/05 06:05

いろいろとご丁寧にありがとうございました!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問