मैं अपनी इकाई में एनमसेट के रूप में विकल्पों के एक सेट का प्रतिनिधित्व करना चाहता हूं और अपने डेटाबेस में एक से कई संबंधों के रूप में प्रतिनिधित्व करना चाहता हूं। यह ठीक से कैसे किया जाता है? मैं केवल पुराने (पूर्व-एनोटेशन) उत्तरों या उत्तर दो टेबल का उपयोग नहीं कर सकता हूं।एनमसेट (दो डेटाबेस टेबल का उपयोग करके) कैसे बने रहें?
मैं निम्न तालिकाओं में परिभाषित किया गया:
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
);
इस इकाई वर्ग:
@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;
}
}
और निश्चित रूप से एक enum:
public enum UserOption {
OPTION_A,
OPTION_B,
OPTION_C;
}
जब मैं बिलाव शुरू मैं निम्नलिखित अपवाद :
org.hibernate.MappingException: Could not determine type for: java.util.Set, at table: Users, for columns: [org.hibernate.mapping.Column(options)]
यह अपवाद एक दूसरे के कारण अपवादों के समूह की जड़ है। यह javax.persistence.PersistenceException
(EntityManagerFactory बनाने में असमर्थ) का कारण बनता है, जो बदले में कुछ निर्भरता इंजेक्शन अपवाद का कारण बनता है।
मैं मानता हूं कि मैं जेपीए/हाइबरनेट में पर्याप्त रूप से पर्याप्त नहीं जानता हूं कि मैं क्या गलत कर रहा हूं। क्या कोई व्यक्ति मेरी सहायता कर सकता है?