Reputation: 137
Hibernate can't resolve my property and I can't figure out why that is. Tried looking at other stackoverflow questions but I couldn't fix it with that.
This are my two classes.
User:
@Entity
@Table(name = "users")
public class User {
@Id
@Column(name = "user_id")
@JsonIgnore
private int userId;
@ManyToOne
@JoinColumn(name = "ad_object_id")
private ADUser activeDirectoryUser;
@Column(name = "created_at")
private DateTime createdAt;
@Column(name = "updated_at")
private DateTime updatedAt;
public User() {}
public User(int userId, ADUser activeDirectoryUser, DateTime createdAt, DateTime updatedAt) {
this.userId = userId;
this.activeDirectoryUser = activeDirectoryUser;
this.createdAt = createdAt;
this.updatedAt = updatedAt;
}
public int getUserId() {
return userId;
}
public void setUserId(int userId) {
this.userId = userId;
}
public ADUser getActiveDirectoryUser() {
return activeDirectoryUser;
}
public void setActiveDirectoryUser(ADUser activeDirectoryUser) {
this.activeDirectoryUser = activeDirectoryUser;
}
public DateTime getCreatedAt() {
return createdAt;
}
public void setCreatedAt(DateTime createdAt) {
this.createdAt = createdAt;
}
public DateTime getUpdatedAt() {
return updatedAt;
}
public void setUpdatedAt(DateTime updatedAt) {
this.updatedAt = updatedAt;
}
}
ADUser:
@Entity
@Table(name = "ad_users")
public class ADUser {
@Id
@Column(name = "ad_object_id")
@JsonIgnore
private String activeDirectoryId;
@Column(name = "email")
private String email;
@Column(name = "full_name")
private String fullName;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@ManyToOne
@JoinColumn(name = "ad_group_id")
private ADGroup classInfo;
public ADUser() {}
public ADUser(String activeDirectoryId, String email, String fullName, String firstName, String lastName, ADGroup classInfo) {
this.activeDirectoryId = activeDirectoryId;
this.email = email;
this.fullName = fullName;
this.firstName = firstName;
this.lastName = lastName;
this.classInfo = classInfo;
}
public String getActiveDirectoryId() {
return activeDirectoryId;
}
public void setActiveDirectoryId(String activeDirectoryId) {
this.activeDirectoryId = activeDirectoryId;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public ADGroup getClassInfo() {
return classInfo;
}
public void setClassInfo(ADGroup classInfo) {
this.classInfo = classInfo;
}
}
I am trying to find users with the following method.
public Optional<User> findByEmail(String email){
Criteria criteria = criteria().add(Restrictions.eq("activeDirectoryUser.email", email));
return Optional.fromNullable(uniqueResult(criteria));
}
This is the error I am receiving.
org.hibernate.QueryException: could not resolve property: activeDirectoryUser.email of: -removed-.objects.User
Upvotes: 0
Views: 602
Reputation: 19956
You need to use an alias for an association
Criteria criteria = criteria().createAlias("activeDirectoryUser",
"activeDirectoryUser").add(Restrictions.eq("activeDirectoryUser.email", email));
Upvotes: 1