前提・実現したいこと
スプリングブートで在庫一覧表に新規登録画面と更新画面を作成し
formを使ってプルダウンメニューを作成。
そのまま入力値をDBに登録するところまで出来ているのですが
プルダウンメニューに列挙型で定数を設定したいのですが
ネットで色々調べるも理解できる記事が見つからず困っています。
初心者で知識不足なので申し訳ないですが
どなたかご教授いただけないでしょうか。
DBの型がchar型になっていて、enunではStringで作成してます。
こちらは変換なども必要なのでしょうか。
追加の情報です。
A-pzさんのアドバイスに明確に答えられないかもしれません。
以下、私が使っているものです。
・エクリプスのSTSでスタータースプリングブート
・MYSQL
・Marven
・トムキャット
・mysql.jdbc.Driver
・ライブラリがよくわかっていないのですが
JREシステムライブラリというフォルダがプロジェクトにあります。
・
pom.xml
1<?xml version="1.0" encoding="UTF-8"?> 2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 6 <groupId>com.funayama.springboot</groupId> 7 <artifactId>pda_k_funayama</artifactId> 8 <version>0.0.1-SNAPSHOT</version> 9 <packaging>jar</packaging> 10 11 <name>pda_k_funayama</name> 12 <description>sample project for Spring Boot</description> 13 14 <parent> 15 <groupId>org.springframework.boot</groupId> 16 <artifactId>spring-boot-starter-parent</artifactId> 17 <version>2.0.5.RELEASE</version> 18 <relativePath/> <!-- lookup parent from repository --> 19 </parent> 20 21 <properties> 22 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 23 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 24 <java.version>1.8</java.version> 25 </properties> 26 27 <dependencies> 28 <dependency> 29 <groupId>org.springframework.boot</groupId> 30 <artifactId>spring-boot-starter-data-jpa</artifactId> 31 </dependency> 32 33 <dependency> 34 <groupId>org.springframework.boot</groupId> 35 <artifactId>spring-boot-starter-web</artifactId> 36 </dependency> 37 38 <dependency> 39 <groupId>mysql</groupId> 40 <artifactId>mysql-connector-java</artifactId> 41 <scope>runtime</scope> 42 </dependency> 43 <dependency> 44 <groupId>org.springframework.boot</groupId> 45 <artifactId>spring-boot-starter-test</artifactId> 46 <scope>test</scope> 47 </dependency> 48 <dependency> 49 <groupId>org.springframework.boot</groupId> 50 <artifactId>spring-boot-starter-thymeleaf</artifactId> 51 </dependency> 52 </dependencies> 53 54 <build> 55 <plugins> 56 <plugin> 57 <groupId>org.springframework.boot</groupId> 58 <artifactId>spring-boot-maven-plugin</artifactId> 59 </plugin> 60 </plugins> 61 </build> 62 63 64</project> 65
コンバーターと列挙型を作成してみましたがうまくいきませんでした。
package com.funayama.springboot; import javax.persistence.AttributeConverter; //フォーム用クラス public class Converter implements AttributeConverter<JenreEnum, String> { //データーベースに登録する値(列挙型使用) @Override public String convertToDatabaseColumn(JenreEnum jenreCode) { if (jenreCode == null) { return null; } switch (jenreCode) { case Clock: return "1"; case Electron: return "2"; case Phone: return "3"; default: return null; } } //Entityに登録する値(列挙型使用) @Override public JenreEnum convertToEntityAttribute(String dbData) { if (dbData == null) { return null; } switch (dbData) { case "1": return JenreEnum.Clock; case "2": return JenreEnum.Electron; case "3": return JenreEnum.Phone; default: return null; } } }
ackage com.funayama.springboot; import javax.persistence.Convert; @Convert(converter = Converter.class) public enum JenreEnum { Unspecified("0", "指定なし"), Clock("1", "時計"), Electron("2", "電子"), Phone("3", "携帯"); //ジャンルID private String genreId; //ジャンル名 private String genreName; //コンストラクタ private JenreEnum(String genreId, String genreName) { this.genreId = genreId; this.genreId = genreName; } //商品IDゲッター public String getGenreId() { return genreId; } //ジャンル名ゲッター public String getGenreName() { return genreName; } }
Entityクラス
1@Convert(converter = Converter.class) 2 @Column(name = "product_genre",nullable = false,length = 2) 3 private String genre;
EntityをEnumに設定できないとエラーが発生してしまいました。
データーベースの型がcharなのにStringでしてしまっているからなのか
HTMLからの取り出し方に問題があるのか
なにがおかしいのか見当もつきません。
どなたかお力添えをしていただけないでしょうか。。
ちなみにHTMLも載せておきます
HTML
1<form method="post" action="/ProductList" th:action="@{/ProductList}" th:object="${formList}"> 2 <div class='form-id'> 3 <!--商品ID--> 4 <label>※必須※ 商品ID</label> <br> <input type="text" 5 name="id"> 6 </div> 7 <!--ジャンル--> 8 <div class='form-jenre'> 9 <label>ジャンル</label><br> <select style="width: 160px;" 10 name="genre"> 11 <option value='0'></option> 12 <option value='1'>時計</option> 13 <option value='2'>電子</option> 14 <option value='3'>携帯</option> 15 </select> 16 </div>
回答2件
あなたの回答
tips
プレビュー