मैंने अपने डोमेन मॉडल में लागू करने के लिए tutorial का पालन किया ताकि अतिरिक्त कॉलम के साथ कई से अधिक रिश्तों को लागू किया जा सके। यह बहुत अच्छा काम करता है लेकिन मैं अपने संबंध के बाईं ओर एक क्षेत्र से पूछताछ करने के लिए मानदंड बनाने में असमर्थ हूं।हाइबरनेट कई से अधिक बुद्धिमान मानदंड मानदंड
इस कोड को ले रहा है
@Entity
@Table(name = "projects")
public class Project implements Cloneable, Serializable{
private Long id;
private String name;
private Set<ProjectOrganization> projectOrganizations = new HashSet<ProjectOrganization>(0);
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false)
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "name", length = 255, nullable = false)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.project")
@Cascade(value = { CascadeType.ALL })
public Set<ProjectOrganization> getProjectOrganizations() {
return this.projectOrganizations;
}
public void setProjectOrganizations(Set<ProjectOrganization> organizationProjects) {
this.projectOrganizations = organizationProjects;
}
}
@Entity
@Table(name = "projects_has_organizations")
@AssociationOverrides({ @AssociationOverride(name = "pk.project", joinColumns = @JoinColumn(name = "projects_id")),
@AssociationOverride(name = "pk.organization", joinColumns = @JoinColumn(name = "organizations_id"))
})
public class ProjectOrganization implements Cloneable, Serializable {
private ProjectOrganizationPK pk = new ProjectOrganizationPK();
private OrganizationRolesEnum role;
public ProjectOrganization() {
}
@Transient
public Organization getOrganization() {
return getPk().getOrganization();
}
public void setOrganization(Organization organization) {
getPk().setOrganization(organization);
}
@EmbeddedId
public ProjectOrganizationPK getPk() {
return pk;
}
public void setPk(ProjectOrganizationPK pk) {
this.pk = pk;
}
@Transient
public Project getProject() {
return getPk().getProject();
}
public void setProject(Project project) {
getPk().setProject(project);
}
@Enumerated(EnumType.STRING)
@Column(nullable = false, length = 50)
public OrganizationRolesEnum getRole() {
return role;
}
public void setRole(OrganizationRolesEnum role) {
this.role = role;
}
}
@Embeddable
public class ProjectOrganizationPK implements Cloneable, Serializable {
/** Generated serial version UID */
private static final long serialVersionUID = -4534322563105003365L;
private Organization organization;
private Project project;
@ManyToOne
public Organization getOrganization() {
return organization;
}
public void setOrganization(Organization organization) {
this.organization = organization;
}
@ManyToOne
public Project getProject() {
return project;
}
public void setProject(Project project) {
this.project = project;
}
}
@Entity
@Table(name = "organizations")
public class Organization implements Cloneable, Serializable {
private Long id;
private String name;
private Set<ProjectOrganization> projectOrganizations = new HashSet<ProjectOrganization>(0);
public Organization() {
}
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(nullable = false)
@Override
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "name", nullable = false, length = 255)
@NotNull(message = "A name is required!")
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "pk.organization")
public Set<ProjectOrganization> getProjectOrganization() {
return this.projectOrganizations;
}
public void setProjectOrganization(Set<ProjectOrganization> projectOrganizations) {
this.projectOrganizations = projectOrganizations;
}
}
मैं चाहता हूँ एक Project
जो एक अनुरोध किया नाम के साथ एक organization
है का चयन करने के लिए एक मापदंड तैयार करना है।
final Criteria crit = getSession().createCriteria(Project.class);
crit.createCriteria("projectOrganizations", "projectOrganization").
createAlias("pk.organization", "organization").
add(Restrictions.like("organization.name", "TEST"));
लेकिन मैं यह त्रुटि है जब मैं इस कोड को चलाने
2012-10-19 10: 38: 43,095 त्रुटि [org.hibernate.util.JDBCExceptionReporter] अज्ञात स्तंभ 'organizati2_.name' में 'जहां खंड'
और एसक्यूएल क्वेरी हाइबरनेट द्वारा उत्पन्न अधूरा है, .. साथ organization.id projects_has_organizations.organization में शामिल होने नहीं करता है तो यह कॉलम organization.name
नहीं मिल सकता हैSELECT
....
FROM
projects this_
INNER JOIN projects_has_organizations projectorg1_ ON this_.id = projectorg1_.projects_id
WHERE
projectorg1_.role =?
AND organizati2_. NAME LIKE ?
ORDER BY
this_.publish_date DESC
इस कोड के साथ क्या गलत है? मैं मानदंडों का उपयोग कर क्वेरी कैसे बना सकता हूं?
लाने मैं अंत में इस्तेमाल किया HQL क्वेरी मेरी समस्या को हल करने । –