पर कई लोगों को बरकरार रखता है मेरे पास एक सुंदर मानक परिदृश्य है जिसके द्वारा मेरे पास उपयोगकर्ता_आईडी के साथ उपयोगकर्ता की तालिका है और पीके के रूप में role_id के साथ भूमिकाओं की एक तालिका है। दो टेबल कई रिश्तों से संबंधित हैं (यानी उपयोगकर्ताओं के पास कई भूमिकाएं हो सकती हैं और कई उपयोगकर्ताओं को एक भूमिका लागू की जा सकती है) और बाद में मेरे पास user_has_roles नामक एक जॉइनिंग टेबल है। Users_has_roles में केवल दो कॉलम user_user_id और roles_role_id हैं।जेपीए कई
मैं (देखें नीचे) और मैं उन भूमिकाओं और तालिकाओं के लिए डेटा बने कोई समस्या नहीं है लेकिन मैं एक भूमिका सौंपी जा रही हैं users_has_roles तालिका मेरी उन में से कोई भी शामिल होने ताकि वर्तमान में करने के लिए कुछ भी जारी रहती है बुरी तरह नाकाम रहे हैं इकाई वर्गों जेनरेट किया है । इससे पहले कि मैं पागल हो जाऊं, किसी ने मुझे अपने दुख से बाहर कर दिया और मुझे दिखाया कि मुझे user_has_roles तालिका में संबंधित roles_role_id के साथ user_user_id जोड़ने के बारे में कैसे जाना चाहिए ताकि मेरे उपयोगकर्ताओं की भूमिका हो सके?
मेरे Users.java इकाई वर्ग:
@Entity
@Table(name = "users")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Users.findAll", query = "SELECT u FROM Users u"),
@NamedQuery(name = "Users.findByUserId", query = "SELECT u FROM Users u WHERE u.userId = :userId"),
@NamedQuery(name = "Users.findByUsername", query = "SELECT u FROM Users u WHERE u.username = :username"),
@NamedQuery(name = "Users.findByPassword", query = "SELECT u FROM Users u WHERE u.password = :password")})
public class Users implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 60)
@Column(name = "user_id")
private String userId;
@Basic(optional = false)
@NotNull
@Pattern(regexp="[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?", message="Invalid email")
@Size(min = 1, max = 45)
@Column(name = "username")
private String username;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 120)
@Column(name = "password")
private String password;
@JoinTable(name = "users_has_roles", joinColumns = {
@JoinColumn(name = "users_user_id", referencedColumnName = "user_id")}, inverseJoinColumns = {
@JoinColumn(name = "roles_role_id", referencedColumnName = "role_id")})
@ManyToMany
private Collection<Roles> rolesCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "usersUserId")
private Collection<UserAccount> userAccountCollection;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "usersUserId")
private Collection<UserDetails> userDetailsCollection;
...
All the getter and setter methods etc.
मेरे Roles.java इकाई वर्ग:
@Entity
@Table(name = "roles")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Roles.findAll", query = "SELECT r FROM Roles r"),
@NamedQuery(name = "Roles.findByRoleId", query = "SELECT r FROM Roles r WHERE r.roleId = :roleId"),
@NamedQuery(name = "Roles.findByRoleName", query = "SELECT r FROM Roles r WHERE r.roleName = :roleName"),
@NamedQuery(name = "Roles.findByRolePermission", query = "SELECT r FROM Roles r WHERE r.rolePermission = :rolePermission"),
@NamedQuery(name = "Roles.findByRoleDescription", query = "SELECT r FROM Roles r WHERE r.roleDescription = :roleDescription")})
public class Roles implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 60)
@Column(name = "role_id")
private String roleId;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "role_name")
private String roleName;
@Basic(optional = false)
@NotNull
@Size(min = 1, max = 45)
@Column(name = "role_permission")
private String rolePermission;
@Size(max = 45)
@Column(name = "role_description")
private String roleDescription;
@ManyToMany(mappedBy = "rolesCollection")
private Collection<Users> usersCollection;
...
All the getter and setter methods etc.
धन्यवाद
---- अद्यतन ----
// New Users
Users currentUser = new Users();
currentUser.setUserId(userId);
currentUser.setUsername(email);
currentUser.setPassword(password);
getUsersFacade().create(currentUser);
हाय मिक्को, मैं कर रहा हूँ अभी भी उलझन में! मुझे समझ में नहीं आता कि उपर्युक्त कोड कैसे काम करता है।अगर मुझे संबंध के दोनों किनारों को संशोधित करने की आवश्यकता है तो क्या मुझे भूमिकाओं और उपयोगकर्ताओं के चयन में तत्व जोड़ने की आवश्यकता है? ऐसा लगता है कि आप केवल भूमिकाओं को जोड़ रहे हैं। इसके अलावा मैं उलझन में हूं जो मैं संबंधित संग्रह में जोड़ रहा हूं। क्या भूमिकाओं को चयन करने के लिए user_user_id और roles_role_id दोनों की आवश्यकता होती है? – tarka
बात यह है कि: डेटाबेस को बनाए रखने के लिए, न्यूनतम आवश्यकताओं को स्वयं पक्ष को संशोधित करना है (मैप किए बिना एक)। खराब बिंदु यह है कि मैप किए गए संग्रह के साथ संग्रह सिंक से बाहर है। यही कारण है कि दोनों पक्षों को संशोधित करना सामान्य रूप से बेहतर होता है, जिसका मतलब है कि दोनों भूमिकाओं में तत्व जोड़ना चयन और भूमिकाएं चयन। –
ठीक है तो सर्वोत्तम संग्रह दोनों संग्रहों में तत्व जोड़ना है ... लेकिन मैं प्रत्येक संग्रह में क्या जोड़ूं? क्या मैं दोनों को user_id और role_id दोनों जोड़ता हूं? – tarka