Kuruluşumda EnumSet ve veritabanımda bire çok ilişki olarak bir seçenekler kümesini temsil etmek istiyorum. Bu nasıl düzgün yapılır? İki tabloyu kullanmadan sadece eski (ön açıklamaları) cevapları veya cevapları bulabilirim. EnumSet nasıl kalıcıdır (iki veritabanı tablosu kullanarak)?
aşağıdaki tablolar tanımlamıştır: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
);
bu varlık sınıfı: Ben Tomcat başlattığınızda
public enum UserOption {
OPTION_A,
OPTION_B,
OPTION_C;
}
Aşağıdaki özel durum almak:
@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;
}
}
ve tabii ki bir enum
:org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: Users, for columns: [org.hibernate.mapping.Column(options)]
Bu istisna, birbirini etkileyen bir grup istisnanın köküdür. Bu, bazı bağımlılık enjeksiyon istisnalarına neden olan bir javax.persistence.PersistenceException
(EntityManagerFactory yapılamıyor) neden olur.
Kabul ediyorum ki, yanlış yaptığımı anlamak için JPA/Hazırda bekletme konusunda yeterince bilgim yok. Bana yardım eden var mı?