JPA查询org.hibernate.QueryException:无法解析属性

lau*_*ura 0 hibernate jpa

@OneToOne在以下表格之间存在双向关系:

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity
@Table
public class StudentAccount implements DomainModel {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer idstudentaccount;
    @OneToOne(optional = false)
    @JoinColumn(name = "idstudent")
    private Student student;
    private String username;
    private String password;
    //getters and setters
}



@Entity
@Table(name = "student")
public class Student implements DomainModel {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer idStudent;
    private String firstname;
    private String lastname;
    @OneToOne(mappedBy = "student", cascade = CascadeType.ALL, targetEntity=StudentAccount.class)
    private StudentAccount studentAccount;
    //getters and setters
Run Code Online (Sandbox Code Playgroud)

如何编写查询以获取用户名是否存在于数据库中?这是我尝试过的:

@Transactional
@Override
public boolean usernameAvailability(String username, Integer studentId) {

    Query checkUsername = getEntityManager()
            .createQuery(
                    "SELECT COUNT(*) FROM StudentAccount s WHERE s.username=:usernameParam AND s.idstudent<>:accIdParam");
    checkUsername.setParameter("usernameParam", username);
    checkUsername.setParameter("accIdParam", studentId);
    long count = (long) checkUsername.getSingleResult();
    if (count > 0) {
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我得到以下异常:

java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: idstudent of: com.af.domain.StudentAccount
Run Code Online (Sandbox Code Playgroud)

Ori*_*Dar 5

那应该是 s.student.idstudent<>:accIdParam

请记住,s是指StudentAccount具有嵌套student特性,具有进一步嵌套idStudent属性