{"id":5957,"date":"2022-08-12T16:56:17","date_gmt":"2022-08-12T07:56:17","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=5957"},"modified":"2022-11-06T11:24:30","modified_gmt":"2022-11-06T02:24:30","slug":"spring-boot-entity-dto","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=5957","title":{"rendered":"Spring Boot &#8211; JPA Enum <-> Database"},"content":{"rendered":"<h1>Spring Boot &#8211; JPA Enum &lt;-&gt; Database<\/h1>\n<p>DB \uceec\ub7fc\uc744 Enum \uc73c\ub85c \ubcc0\uacbd\ud560 \ub54c AttributeConverter \ub97c \uc368\ubcf4\uc790.<\/p>\n<h2>BaseEnum \uc0dd\uc131<\/h2>\n<pre><code class=\"language-java\">public interface BaseEnum&lt;V&gt; {\n\n    V getValue();\n\n    static &lt;E extends Enum&lt;E&gt; &amp; BaseEnum&lt;ID&gt;, ID&gt; E fromValue(ID value, Class&lt;E&gt; type) {\n        if (value == null) {\n            return null;\n        }\n\n        for (E e : type.getEnumConstants()) {\n            if (e.getValue().equals(value)) {\n                return e;\n            }\n        }\n\n        return null;\n    }\n}<\/code><\/pre>\n<h2>BaseEnumConverter \uc0dd\uc131<\/h2>\n<pre><code class=\"language-java\">@Converter\npublic class BaseEnumConverter&lt;E extends BaseEnum&lt;V&gt;, V&gt; implements AttributeConverter&lt;E, V&gt; {\n\n    @Override\n    public V convertToDatabaseColumn(E attribute) {\n        return attribute != null ? attribute.getValue() : null;\n    }\n\n    @Override\n    public E convertToEntityAttribute(V dbData) {\n        throw new RuntimeException(&quot;override this method.&quot;);\n    }\n}<\/code><\/pre>\n<h2>Enum \uc0dd\uc131<\/h2>\n<p>String \uc73c\ub85c \uc800\uc7a5\ub418\ub294 Enum<\/p>\n<pre><code class=\"language-java\">public enum YNType implements BaseEnum&lt;String&gt; {\n\n    Y(&quot;Y&quot;),\n    N(&quot;N&quot;);\n\n    private final String value;\n\n    YNType(String value) {\n        this.value = value;\n    }\n\n    @Override\n    public String getValue() {\n        return value;\n    }\n}<\/code><\/pre>\n<p>Integer \ub85c \uc800\uc7a5\ub418\ub294 Enum<\/p>\n<pre><code class=\"language-java\">public enum StatusType implements BaseEnum&lt;Integer&gt; {\n    BAD(1),\n    GOOD(2),\n    UNKNOWN(3);\n\n    private final Integer value;\n\n    StatusType(int value) {\n        this.value = value;\n    }\n\n    @Override\n    public Integer getValue() {\n        return value;\n    }\n}<\/code><\/pre>\n<h2>EnumConverter<\/h2>\n<p>String \uc73c\ub85c \uc800\uc7a5\ub418\ub294 Enum<\/p>\n<pre><code class=\"language-java\">public class YNTypeConverter extends BaseEnumConverter&lt;YNType, String&gt; {\n\n    @Override\n    public YNType convertToEntityAttribute(String dbData) {\n        return BaseEnum.fromValue(dbData, YNType.class);\n    }\n}<\/code><\/pre>\n<p>Integer \ub85c \uc800\uc7a5\ub418\ub294 Enum<\/p>\n<pre><code class=\"language-java\">public class StatusTypeConverter extends BaseEnumConverter&lt;StatusType, Integer&gt; {\n\n    @Override\n    public StatusType convertToEntityAttribute(Integer dbData) {\n        return BaseEnum.fromValue(dbData, StatusType.class);\n    }\n}<\/code><\/pre>\n<h2>Entity<\/h2>\n<pre><code class=\"language-java\">@Entity\npublic class IpgoMaster {\n\n    @Convert(converter = StatusTypeConverter.class)\n    private IpgoType statusType;\n\n    @Convert(converter = YNTypeConverter.class)\n    private YNType isUsing = YNType.Y;\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Spring Boot &#8211; JPA Enum &lt;-&gt; Database DB \uceec\ub7fc\uc744 Enum \uc73c\ub85c \ubcc0\uacbd\ud560 \ub54c AttributeConverter \ub97c \uc368\ubcf4\uc790. BaseEnum \uc0dd\uc131 public interface BaseEnum&lt;V&gt; { V getValue(); static &lt;E extends Enum&lt;E&gt; &amp; BaseEnum&lt;ID&gt;, ID&gt; E fromValue(ID value, Class&lt;E&gt; type) { if (value == null) { return null; } for (E e : type.getEnumConstants()) { if (e.getValue().equals(value)) { return\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=5957\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[29],"tags":[],"class_list":["post-5957","post","type-post","status-publish","format-standard","hentry","category-spring-boot-2-5"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/5957","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5957"}],"version-history":[{"count":12,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/5957\/revisions"}],"predecessor-version":[{"id":6942,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/5957\/revisions\/6942"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5957"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5957"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5957"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}