Как сохранить Enum в БД используя JPA?

В этом уроке я хочу вам показать как сохранять такие объекты как 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.

Урок создан: 08 августа 2013 | Просмотров: 9471 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии:

  • 09 сентября 2014 в 07:47

    Petr

    Прекрасно!

  • 19 декабря 2014 в 23:18

    Олег

    Огромное спасибо за инструкцию

  • 06 марта 2015 в 23:16

    Alex

    Интересно, на какой тип данных EnumType.ORDINAL будет намаплен? Можно ли управлять этим, не используя columnDefinition?