В этом уроке я хочу вам показать как сохранять такие объекты как Enum в базу данных используя Java Persistecr API.
Данный урок является легкой сложности, но я решил что он будет полезен вам.
Как создать WEB-проект с использованием JPA я не буду показывать, так как уже показывал это тут ‘JPA работа с базой данных‘.
Шаг 1
Давайте создадим сущность User.java:
package com.devcolibri.entity; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.io.Serializable; import java.util.Set; @Entity @Table(name = "User") public class User implements Serializable{ @Id private long id; @Column(name="login") private String login; @Column(name="email", nullable = false) private String email; @Column(name="password") private String password; @Column(name="first_name") private String firstName; @Column(name="last_name") private String lastName; public User() { } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }
Как видите пока в этой сущности не используется Enum. В каком случае нам нужно будет использовать Enum?
Например у пользователя (User) должна быть роль, вот для этого мы и будем использовать Enum.
Шаг 2
Давайте создадим Enum -> RoleEnum.java:
package com.devcolibri.entity.enums; public enum RoleEnum { ANONYMOUS, USER, ADMIN; RoleEnum() { } }
Теперь у нас есть enum с перечислением ролей пользователя.
Шаг 3
Теперь давайте добавим в сущность User роль:
package com.devcolibri.entity; import org.hibernate.annotations.GenericGenerator; import javax.persistence.*; import java.io.Serializable; import java.util.Set; @Entity @Table(name = "User") public class User implements Serializable{ @Id private long id; @Column(name="login") private String login; @Column(name="email", nullable = false) private String email; @Column(name="password") private String password; @Column(name="first_name") private String firstName; @Column(name="last_name") private String lastName; @Column(name = "role") @Enumerated(EnumType.STRING) private RoleEnum role; public User() { } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public RoleEnum getRole() { return role; } public void setRole(RoleEnum role) { this.role = role; } }
Как видите для того чтобы добавить Enum в Entity нам потребовалось просто проаннотировать атрибут enum аннотацией @Enumerated.
Теоретический материал
Как вы уже видели аннотация @Enumerated – принимает параметр типа EnumType:
1. EnumType.STRING – это значит, что в базе будет хранится имя этого enum.
То есть если мы зададим role = RoleEnum.ADMIN, то в БД в поле role будет хранится значение ADMIN.
2. EnumType.ORDINAL – это значит, что в базе будет хранится ID этого enum. ID – это место расположение в списке перечисления начиная с 0.
Например если значение enum равно ADMIN, то в базе будет хранится число 2, а если будет ANONYMOUS, то в базе будет хранится 0.
ПОХОЖИЕ ПУБЛИКАЦИИ
- None Found
3 комментариев к статье "Как сохранить Enum в БД используя JPA?"
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Прекрасно!
Огромное спасибо за инструкцию
Интересно, на какой тип данных EnumType.ORDINAL будет намаплен? Можно ли управлять этим, не используя columnDefinition?