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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

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

Q&A

解決済

1回答

3929閲覧

Repeated column in mapping for entity エラー

yuu_info

総合スコア14

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

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

0グッド

0クリップ

投稿2020/09/07 06:36

編集2020/09/07 07:40

前提・実現したいこと

ユーザーの予定管理表を作りたいと考えているのですが、下記のエラーに悩まされています。
皆様の知恵をお借りしたいです。

具体的には、UserService.javaの

UserPlan userPlan = new UserPlan(); userPlan.setPlan(userPRequest.getPlan()); userPlan.setDate(userPRequest.getDate()); userPlan.setId(userPRequest.getId());← return userPlan;

ここにUserPlan.user.idのような形でidをセットしたいです。

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

Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: com.example.springsample.entity.UserPlan column: id (should be mapped with insert="false" update="false")

User.java

package com.example.springsample.entity; import java.io.Serializable; import java.util.Date; import java.util.List; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import javax.persistence.Table; import lombok.Data; @Entity @Data @Table(name="user") public class User implements Serializable { //ユーザー情報のエンティティ @Id @Column(name="id") @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; @Column(name="name") private String name; @Column(name="address") private String address; @Column(name="phone") private String phone; @Column(name="update_date") private Date updateDate; @Column(name="create_date") private Date createDate; @Column(name="delete_date") private Date deleteDate; @OneToMany(mappedBy = "user", cascade = CascadeType.ALL) private List<UserPlan> userPList; }

UserPlan.java

package com.example.springsample.entity; import java.io.Serializable; import java.util.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; import lombok.Data; @Entity @Data @Table(name="user_plan") public class UserPlan implements Serializable { //ユーザー予定情報のエンティティ @Id @Column(name="plan_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private Long plan_id; @Column(name="plan") private String plan; @Column(name="date") private Date date; @Column(name="id") private Long id; @ManyToOne @JoinColumn(name="id") private User user; }

UserController.java

package com.example.springsample.controller; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import com.example.springsample.dto.UserPRequest; import com.example.springsample.dto.UserRequest; import com.example.springsample.entity.User; import com.example.springsample.entity.UserPlan; import com.example.springsample.service.UserService; @Controller public class UserController { @Autowired UserService userService; @RequestMapping(value = "/user/list", method = RequestMethod.GET)//user/listにアクセスがあったときユーザー情報を抜き出す public String displayList(Model model) { List<User> userlist = userService.searchAll(); model.addAttribute("userlist", userlist);//modelにSELECTしたデータを追加 return "user/list"; } @RequestMapping(value = "/user/add", method = RequestMethod.GET)//user/addにアクセスがあった時ユーザーリクエストのインスタンスを返す public String displayAdd(Model model) { model.addAttribute("userRequest", new UserRequest()); return "user/add"; } @RequestMapping(value="/user/create", method = RequestMethod.POST) public String create(@ModelAttribute UserRequest userRequest, Model model) { // ユーザー情報の登録 userService.create(userRequest); return "redirect:/user/list"; } @RequestMapping(value = "/user/tes", method = RequestMethod.POST) public String detailModel(Model model, @RequestParam((String) "id") Long id) { //選択ユーザーの抽出 List<UserPlan> userPlan = userService.findUser(id); model.addAttribute("id", id); model.addAttribute("userdata", userPlan); return "user/tes"; } @RequestMapping(value = "/user/planadd", method = RequestMethod.GET)//user/planaddにアクセスがあった時ユーザーリクエストのインスタンスを返す public String planEdit(Model model) { model.addAttribute("userPRequest", new UserPRequest()); return "user/planadd"; } @RequestMapping(value="/user/plancreate", method = RequestMethod.POST) public String planCreate(@ModelAttribute UserPRequest userPRequest, Model model) { // 予定情報の登録 userService.planCreate(userPRequest); return "redirect:/user/tes"; } @RequestMapping(value = "/user/delete", method = RequestMethod.POST) public String delete(@RequestParam((String) "id") Long id) { //選択ユーザーの抽出 userService.delete(id); return "user/tes"; } }

UserService.java

package com.example.springsample.service; import java.util.Date; import java.util.List; import javax.transaction.Transactional; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.example.springsample.dto.UserPRequest; import com.example.springsample.dto.UserRequest; import com.example.springsample.entity.User; import com.example.springsample.entity.UserPlan; import com.example.springsample.repository.UserPlanRepository; import com.example.springsample.repository.UserRepository; @Service @Transactional(rollbackOn = Exception.class) public class UserService { @Autowired UserRepository userRepository; @Autowired UserPlanRepository userPlanRepository; public List<User> searchAll() { return userRepository.findAll();//ユーザー情報の検索 } public void create(UserRequest userRequest) { userRepository.save(CreateUser(userRequest));//ユーザー情報の登録 } public void planCreate(UserPRequest userRequest) { userPlanRepository.save(CreatePlan(userRequest));//ユーザー情報の登録 } private User CreateUser(UserRequest userRequest) { Date now = new Date(); User user = new User(); user.setName(userRequest.getName()); user.setAddress(userRequest.getAddress()); user.setPhone(userRequest.getPhone()); user.setCreateDate(now); user.setUpdateDate(now); return user; } private UserPlan CreatePlan(UserPRequest userPRequest) { UserPlan userPlan = new UserPlan(); userPlan.setPlan(userPRequest.getPlan()); userPlan.setDate(userPRequest.getDate()); userPlan.setId(userPRequest.getId()); return userPlan; } public List<UserPlan> findUser(Long id) { List<UserPlan> userPlan = userPlanRepository.find(id); return userPlan; } public void delete(Long id) { userPlanRepository.deleteById(id);//ユーザー情報の登録 } }

###planadd.html

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"> <head> <title>予定新規登録</title> <link href="/css/planadd.css" rel="stylesheet"></link> <meta charset="utf-8" /> </head> <body> <h1>予定登録</h1> <form th:action="@{/user/plancreate}" th:object="${userPRequest}" method="post"> <table> <tr> <th class="cell_plan">予定</th> <th class="cell_required">※</th> <td><input type="text" th:field="*{plan}"></td> </tr> <tr> <th class="cell_title">日付</th> <th class="cell_required"></th> <td><input type="text" th:field="*{date}"></td> </tr> <tr> <th class="cell_title">ユーザーID</th> <th class="cell_required"></th> <td><input type="text" th:field="*{id}"></td> </tr> </table> <div class="btn_area_center"><input type="submit" value="登録" class="btn"></div> </form> </body> </html>

試したこと

UserPlan.javaの
@Column(name="id")
private Long id;
を削除すると動くのですが、それだとユーザー予定を登録する時にidを登録できなくなってしまいます。

補足情報

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

自己解決

UserPlan userPlan = new UserPlan(); userPlan.setUser(userRepository.findById(userPRequest.getId()).orElse(null)); userPlan.setPlan(userPRequest.getPlan()); userPlan.setDate(userPRequest.getDate()); return userPlan;

UserService.javaのCreatePlanを上記のようにしたら動作しました。

投稿2020/09/07 08:46

yuu_info

総合スコア14

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問