java - Hibernate 无法解析属性

标签 java hibernate

Hibernate 无法解析我的属性,我不明白这是为什么。尝试查看其他 stackoverflow 问题,但我无法解决它。

这是我的两个类。

用户:

@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;
    }
}

AD 用户:

@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;
    }
}

我正在尝试使用以下方法查找用户。

public Optional<User> findByEmail(String email){
    Criteria criteria = criteria().add(Restrictions.eq("activeDirectoryUser.email", email));

    return Optional.fromNullable(uniqueResult(criteria));
}

这是我收到的错误。

org.hibernate.QueryException: could not resolve property: activeDirectoryUser.email of: -removed-.objects.User

最佳答案

您需要为关联使用别名

Criteria criteria = criteria().createAlias("activeDirectoryUser",
    "activeDirectoryUser").add(Restrictions.eq("activeDirectoryUser.email", email));

关于java - Hibernate 无法解析属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35986160/

相关文章:

java - (java) 快速排序,先按数字对数字-字符对进行排序,然后按字符排序

java - 如何对多对多关系执行存在查询

java - 使用复合主键和注释 : 映射多对多

java - 由于 MS SQL 中 UNIQUE 约束的非标准行为,Spring/Hibernate 的解决方法

java - 如何使用 servlet 创建新帐户

java - API 级别低于 24 时不支持默认方法 boolean methodname()

java - 在 Java 中获取实例的好处

java - 在Java中跟踪内存地址

java - 使用 Hibernate EntityManager(与 Hibernate Core 相比)有什么缺点吗?

Hibernate:如何处理 'saving'数据库中可能存在或不存在的 transient 对象