मैंने अपने दो इकाई वर्गों उपयोगकर्ता और अनुमति के बीच कई से अधिक संबंधों को परिभाषित किया है। उपयोगकर्ता का उपयोगकर्ता नाम और काउंटीआईडी का प्राथमिक कुंजी समग्र है, और मेरी अनुमति तालिका में नियमित पूर्णांक आईडी है। तालिका UserPermission में तीन विदेशी कुंजी हैं, इसकी प्राथमिक कुंजी: उपयोगकर्ता नाम, काउंटीआईडी और अनुमति आईडी।हाइबरनेट: विदेशी कुंजी में कॉलम की गलत संख्या
चूंकि यह एक विरासत डेटाबेस है, इसलिए मुझे सही चीज (™) करने का अवसर नहीं होगा और उपयोगकर्ता पर एक पूर्णांक प्राथमिक कुंजी बनाने का अवसर नहीं होगा।
मैं User.class में इस तरह कई-से-अनेक संबंध परिभाषित किया है:
@ManyToMany(targetEntity=Permission.class, cascade={ CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(name="tblUserPermission",
joinColumns = { @JoinColumn(name="username"), @JoinColumn(name="countyId") },
inverseJoinColumns = { @JoinColumn(name="permissionId") })
private Collection<Permission> permissions;
Permission.class इस कहते हैं:
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "permissions", targetEntity = User.class)
private Collection<User> users;
मुझे लगा कि यह जाने का रास्ता था , लेकिन जब मैं अपने स्प्रिंग संदर्भ हाइबरनेट 3 का उपयोग करता है ऊपर आग, मैं मिलता है:
Caused by: org.hibernate.AnnotationException: A Foreign key refering com.mydomain.data.entities.User from com.mydomain.data.entities.Permission has the wrong number of column. should be 1
मुझे अपने ANNOT में गलत किया है व्यावहारिक? यह 2 होना चाहिए, 1.
अद्यतन नहीं:
आर्थर मैं referencedColumnName जोड़ने का सुझाव दिया है, लेकिन यह मेरे लिए एक नया अपवाद दिया:
Caused by: org.hibernate.AnnotationException: referencedColumnNames(username, countyId) of com.mydomain.data.entities.Permission.permissions referencing com.mydomain.data.entities.User not mapped to a single property
उनके अनुरोध पर, यहाँ कोड का पालन करें : Permission.Class:
package com.mydomain.data.entities;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;
import org.hibernate.annotations.ForeignKey;
@Entity
@Table(name = "tblPermission")
public class Permission extends PublishableEntityImpl implements Serializable, Cloneable {
private static final long serialVersionUID = 7155322069731920447L;
@Id
@Column(name = "PermissionId", length = 8, nullable = false)
private String PermissionId = "";
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "CountyId", nullable = false)
@ForeignKey(name="FK_CountyID")
private County county;
@Column(name = "Permission", nullable = true)
private Integer permission = 1;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE},
mappedBy = "Permissions",
targetEntity = Item.class)
private Collection<Item> items;
@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE},
mappedBy = "Permissions",
targetEntity = User.class)
private Collection<User> users;
/** Getters and Setters **/
}
और User.class
package com.mydomain.data.entities;
import java.util.*;
import java.io.Serializable;
import javax.persistence.*;
import org.hibernate.annotations.ForeignKey;
import org.hibernate.annotations.IndexColumn;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.GrantedAuthorityImpl;
import org.springframework.security.core.userdetails.UserDetails;
@Entity
@Table(name = "tblUser")
public class User extends PublishableEntityImpl implements Serializable, Cloneable {
@Id
@Column(name = "CountyId", nullable = false)
private Integer countyId;
@Id
@Column(name = "Username", length = 25, nullable = false)
private String username;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "CountyId", nullable = false, insertable=false, updatable=false)
@ForeignKey(name="FK_CountyID")
private County county;
@Column(name = "Name", length = 50, nullable = true)
private String name;
@Column(name = "Password", length = 30, nullable = true)
private String password;
@Column(name = "Role", nullable = false)
private Integer role;
@ManyToMany(targetEntity=Permission.class,
cascade={ CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(name="tblUserPermission",
joinColumns = { @JoinColumn(name="Username", referencedColumnName="Username"), @JoinColumn(name="CountyId", referencedColumnName="CountyId") },
inverseJoinColumns = { @JoinColumn(name="PermissionId", referencedColumnName="PermissionId") })
private Collection<Permission> permissions;
@OneToMany(fetch=FetchType.LAZY, mappedBy="county")
@IndexColumn(name="version")
private List<Version> versions;
/** Getters and setters **/
}
चीयर्स
Nik
हैलो, मैं बहुत ही समस्या थी, लेकिन अपने उदाहरण का पालन करना, मैं इस त्रुटि हो रही है: संदर्भ एक अज्ञात इकाई: java.lang.String। मेरे मामले में काउंटी स्ट्रिंग प्रकार होगा। –