Mike
Mike

Reputation: 137

Hibernate can not resolve property

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

Answers (1)

v.ladynev
v.ladynev

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

Related Questions