Не сохранять значение enum в базе данных, почему?

Не сохраняет значение enum в базе данных, я думаю, что все, или я не понимаю, я пытаюсь сохранить, так как консоль показывает мне данные, но когда я спрашиваю из базы данных, я получаю другое значение

@Entity
@Table(name = "User")
public class User implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private long id;

    @Column(name = "name")
    private String name;

    @Column(name = "password")
    private String password;

    @Column(unique = true, name = "email")
    private String email;

    @Column(name="rol")
    Rol rol;



    @Column(name = "life")
    Life life;


    public User() {

    }
    }

У меня есть это в .info, показать это сообщение "ВЛАДЕЛЕЦ"

Set<User> users =new HashSet<>();
            log.info("CONSOLE"+ user.getRol());
            users.add(user);
            meet.setUsers(users);
            return meetRepository.save(meet);

но в чванстве я получаю другое значение ROL: PARTICIPANT

[
  {
    "id": 1,
    "name": "string2",
    "state": "pause",
    "bet": {
      "profit": 0,
      "inversion": 0
    },
    "users": [
      {
        "id": 1,
        "name": "string",
        "password": "string",
        "email": "ema",
        "rol": "PARTICIPANT",
        "life": "suspend"
      }
    ]
  }
]

Всего 2 ответа


Если ваши поля rol и life являются Enums, вы должны объявить их как @Enumerated с @Enumerated . Есть два варианта. По умолчанию будет храниться порядковый номер. Или вы можете использовать имя строки для хранения в БД. Это лучший вариант с точки зрения ремонтопригодности:

@Enumerated(EnumType.STRING)
@Column(name="rol")
Rol rol;

@Enumerated(EnumType.STRING)
@Column(name = "life")
Life life;

Два замечания:

  1. Если поле базы данных имеет то же имя, что и атрибут, вы можете опустить @Column. И если таблица имеет то же имя, что и сущность, это также верно для аннотации @Table.

  2. Узнайте больше о Enums и JPA, и если вы действительно должны использовать его в одной из моих статей: https://72.services/de/should-you-use-enums-with-jpa/


Когда вы сохраняете Enum в базу данных, как указано выше, у вас есть возможность сохранить его как String или как Numeric Ordinal. Числовая опция очень трудна, потому что каждый раз, когда вам нужно обновить значения перечисления или изменить порядок значений, вы будете связываться с опциями базы данных для этого поля. Еще одна вещь, которая очень болезненна, даже когда вы сохраняете строки в базе данных, это то, что когда вы используете какой-то ORM, такой как Hibernate, и у вас есть значения NULL. Поэтому сохраняйте свои перечисления в виде строк и избегайте значения NULL.


Есть идеи?

10000