Spring JPAを使ったプログラムでリレーション関係の2つのスキーマに一括INSERTを
やりたいのですが、うまくいかず。
UserServiceでそれぞれの入力項目をそれぞれのオブジェクトに格納し
saveでそれぞれのスキーマに入力する予定でした。
ネットを漁って2日が立ちますが、全くわからないので
手法やサイトのリンクを教えていただければ幸いです。
@Controller public class UserController { /** * ユーザー情報 Service */ @Autowired UserService userService; /** * ユーザー新規登録画面を表示 * @param model Model * @return ユーザー情報一覧画面 */ @RequestMapping(value = "/user/add", method = RequestMethod.GET) 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"; } }
@Data public class UserRequest implements Serializable { /** * 契約ID */ private String contractId; /** * 会社名 */ private String company; /** * 店舗名 */ private String storeName; /** * フリガナ */ private String furigana; /** * 導入経路 */ private String route; /** * アカウント発行日 */ private String account; /** * 支払い開始日 */ private String payStart; /** * プランID */ private String planId; /** * 請求ID */ private String billingId; /** * 請求方法 */ private String billingMethod; /** * 請求年月 */ private String billingData; /** * プラン詳細 */ private String planContents; /** * プランオプション */ private String planOption; /** * ボリュームディスカウント */ private String discount; /** * 有効アカウント */ private String activeAccount; /** * 料金 */ private String price; }
@Entity @Table(name="billing_storedata") public class BillingStore implements Serializable{ @Id @Column(name="number_id") @Getter @Setter private Long numberId; @Column(name="billing_data") @Getter @Setter private String billingData; @Column(name="billing_method") @Getter @Setter private String billingMethod; }
@Data @Entity @Table(name="contractor_information") public class Contractor implements Serializable{ @Id @Column(name="number_id") @GeneratedValue(strategy = GenerationType.IDENTITY) private String numberId; @Column(name="contract_id") private String contractId; @Column(name="company") private String company; @Column(name="store_name") private String storeName; @Column(name="furigana") private String furigana; @Column(name="route") private String route; @Column(name="account") private String account; @Column(name="price") private String price; @Column(name="pay_start") private String payStart; @Column(name="plan_id") private String planId; @Column(name="billing_id") private String billingId;
@Entity @Table(name="plan_information") public class PlanInformation implements Serializable{ @Id @Column(name="plan_id") @Getter @Setter private String planId; @Column(name="plan_contents") @Getter @Setter private String planContents; @Column(name="plan_option") @Getter @Setter private String planOption; @Column(name="discount") @Getter @Setter private String discount; @Column(name="active_account") @Getter @Setter private String activeAccount; }
@Repository public interface UserRepository extends JpaRepository<Contractor, Long> {}
@Service @Transactional(rollbackOn = Exception.class) public class UserService { /** * ユーザー情報 Repository */ @Autowired UserRepository userRepository; /** * ユーザー情報新規登録 * @param user ユーザー情報 */ public void create(UserRequest userRequest) { userRepository.save(CreateUser(userRequest)); } /** * ユーザーTBLエンティティの生成 * @param userRequest ユーザー情報リクエストデータ * @return ユーザーTBLエンティティ */ private Contractor CreateUser(UserRequest userRequest) { BillingData billingData = new BillingData(); BillingStore billingStore = new BillingStore(); Contractor contractor = new Contractor(); PlanInformation planInformation = new PlanInformation(); contractor.setContractId(userRequest.getContractId()); contractor.setCompany(userRequest.getCompany()); contractor.setStoreName(userRequest.getStoreName()); contractor.setFurigana(userRequest.getFurigana()); contractor.setRoute(userRequest.getRoute()); contractor.setAccount(userRequest.getAccount()); contractor.setPayStart(userRequest.getPayStart()); contractor.setPlanId(userRequest.getPlanId()); contractor.setBillingId(userRequest.getBillingId()); contractor.setPrice(userRequest.getPrice()); billingStore.setBillingMethod(userRequest.getBillingMethod()); billingStore.setBillingData(userRequest.getBillingData()); planInformation.setPlanContents(userRequest.getPlanContents()); planInformation.setPlanOption(userRequest.getPlanOption()); planInformation.setDiscount(userRequest.getDiscount()); planInformation.setActiveAccount(userRequest.getActiveAccount()); return contractor; } }
<body> <h1>ユーザー新規登録</h1> <form th:action="@{/user/create}" th:object="${userRequest}" method="post"> <table> <tr> <th class="cell_title">契約ID</th> <th class="cell_required">※</th> <td><input type="text" th:field="*{contractId}"></td> </tr> <tr> <th class="cell_title">会社名</th> <th class="cell_required"></th> <td><input type="text" th:field="*{company}"></td> </tr> <tr> <th class="cell_title">店舗名</th> <th class="cell_required"></th> <td><input type="text" th:field="*{storeName}"></td> </tr> <tr> <th class="cell_title">フリガナ</th> <th class="cell_required"></th> <td><input type="text" th:field="*{furigana}"></td> </tr> <tr> <th class="cell_title">導入経路</th> <th class="cell_required"></th> <td><input type="text" th:field="*{route}"></td> </tr> <tr> <th class="cell_title">アカウント発行日</th> <th class="cell_required"></th> <td><input type="text" th:field="*{account}"></td> </tr> <tr> <th class="cell_title">支払い開始日</th> <th class="cell_required"></th> <td><input type="text" th:field="*{payStart}"></td> </tr> <tr> <th class="cell_title">プランID</th> <th class="cell_required"></th> <td><input type="text" th:field="*{planId}"></td> </tr> <tr> <th class="cell_title">請求ID</th> <th class="cell_required"></th> <td><input type="text" th:field="*{billingId}"></td> </tr> <tr> <th class="cell_title">請求方法</th> <th class="cell_required"></th> <td><input type="text" th:field="*{billingMethod}"></td> </tr> <tr> <th class="cell_title">請求年月</th> <th class="cell_required"></th> <td><input type="text" th:field="*{billingData}"></td> </tr> <tr> <th class="cell_title">プラン詳細</th> <th class="cell_required"></th> <td><input type="text" th:field="*{planContents}"></td> </tr> <tr> <th class="cell_title">プランオプション</th> <th class="cell_required"></th> <td><input type="text" th:field="*{planOption}"></td> </tr> <tr> <th class="cell_title">ボリュームディスカウント</th> <th class="cell_required"></th> <td><input type="text" th:field="*{discount}"></td> </tr> <tr> <th class="cell_title">有効アカウント</th> <th class="cell_required"></th> <td><input type="text" th:field="*{activeAccount}"></td> </tr> <tr> <th class="cell_title">料金</th> <th class="cell_required"></th> <td><input type="text" th:field="*{price}"></td> </tr> </table> <div class="btn_area_center"><input type="submit" value="登録" class="btn"></div> </form> </body> </html>
回答1件
あなたの回答
tips
プレビュー