Чего не хватает или нет?
Я пытаюсь отобразить класс ниже, у которого есть набор Enum.Я сделал именно так, как это в документации, в других темах или на сайтах.Но это не сработало.
При создании нового объекта сохраняются только остальные атрибуты.Набор игнорируется.
PS: он отлично работает для чтения.
Я использую spring-boot, mysql, hibernate.
Enum:
public enum Role {
ROLE_A,
ROLE_B,
ROLE_N;
}
Класс:
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.*;
import org.hibernate.annotations.NaturalId;
@Entity
@Table(name = "Users")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(nullable = false, length = 50, unique = true)
@NaturalId
private String username;
@Column(nullable = false, length = 100)
private String password;
@Column(nullable = false)
private boolean active = true;
@Column(nullable = false, length = 50)
private String name;
@Column(nullable = false, length = 100)
private String lastname;
@Column(nullable = false, length = 100, unique = true)
private String email;
@ElementCollection(targetClass = Role.class)
@CollectionTable(name = "roles", joinColumns = @JoinColumn(name = "id_user"))
@Enumerated(EnumType.STRING)
@Column(name = "role")
private Set<Role> roles = new HashSet<>();
// constructor
// gets & setters
// hashCode & equals
// toString
}
DDL:
CREATE TABLE Users (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(100) NOT NULL,
active BOOL NOT NULL DEFAULT true,
name VARCHAR(50) NOT NULL,
lastname VARCHAR(100) NOT NULL,
email VARCHAR(100) NOT NULL,
PRIMARY KEY(id),
UNIQUE INDEX unique_username(username),
UNIQUE INDEX unique_email(email)
);
CREATE TABLE Roles (
id_user BIGINT UNSIGNED NOT NULL,
role VARCHAR(50) NOT NULL,
PRIMARY KEY(id_user, role),
FOREIGN KEY(id_user)
REFERENCES Users(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
ТЕСТ:
User u = new User();
u.setName("nikolas");
u.setLastname("Martins");
u.setEmail("nik@outlook.com");
u.setUsername("nik");
u.setPassword("password");
u.getRoles().add(Role.ROLE_A);
u.getRoles().add(Role.ROLE_B);
entityManager.save(u);