Ich möchte eine Reihe von Optionen als ein EnumSet in meiner Entität und als eine Eins-zu-viele-Beziehung in meiner Datenbank darstellen. Wie wird das richtig gemacht? Ich kann nur alte (Vorannotationen) Antworten oder Antworten finden, die nicht zwei Tabellen verwenden.Wie behalte ich ein EnumSet (mit zwei Datenbanktabellen)?
I definiert die folgenden Tabellen:
CREATE TABLE Users (
id SERIAL PRIMARY KEY,
name VARCHAR(255) NOT NULL UNIQUE
);
CREATE TABLE User_Options (
user_id INT,
user_option VARCHAR(255),
PRIMARY KEY (user_id, user_option),
FOREIGN KEY (user_id) REFERENCES Users(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
diese Objektklasse:
@Entity(name = "Users")
public final class User {
@Id
@GeneratedValue
private int id;
@Column(nullable = false, unique = true)
private String name;
private final Set<UserOption> options;
{
this.options = EnumSet.noneOf(UserOption.class);
}
/* plain getter for id included */
/* plain getter and setter for name included */
@ElementCollection(fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "User_Options"
, joinColumns = @JoinColumn(name = "user_id"))
@Column(name = "user_option", nullable = false)
public Set<UserOption> getOptions() {
return this.options;
}
}
und natürlich eine Enumeration:
public enum UserOption {
OPTION_A,
OPTION_B,
OPTION_C;
}
Wenn ich Tomcat starten erhalte ich die folgende Ausnahme :
org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: Users, for columns: [org.hibernate.mapping.Column(options)]
Diese Ausnahme ist die Wurzel einer Reihe von Ausnahmen, die sich gegenseitig verursachen. Es verursacht javax.persistence.PersistenceException
(EntityManagerFactory kann nicht erstellt werden), was wiederum einige Abhängigkeitsinjektionsausnahmen verursacht.
Ich gebe zu, ich bin nicht gut genug in JPA/Hibernate, um zu verstehen, was ich falsch mache. Kann mir jemand helfen?