Java 为什么我会得到一个JPQL NullPointerException以及如何修复它?

Java 为什么我会得到一个JPQL NullPointerException以及如何修复它?,java,hibernate,spring-boot,nullpointerexception,jpql,Java,Hibernate,Spring Boot,Nullpointerexception,Jpql,当我在Dao上使用JPQL@Query时,我需要一个nullPointerException的帮助。我尝试了不同的选项,但似乎找不到问题所在。 我在网上读到这是一个依赖性问题,所以我更新了所有的依赖性,但我仍然得到相同的错误。我正在尝试使用带有@JoinColumn注释和manytone映射注释的user_id将考试链接到用户 错误 埃克斯马道 尝试在查询中定义显式联接: select e from Exams e join e.user u where u.id= ?#{principal.i

当我在Dao上使用JPQL@Query时,我需要一个nullPointerException的帮助。我尝试了不同的选项,但似乎找不到问题所在。 我在网上读到这是一个依赖性问题,所以我更新了所有的依赖性,但我仍然得到相同的错误。我正在尝试使用带有@JoinColumn注释和manytone映射注释的user_id将考试链接到用户

错误

埃克斯马道


尝试在查询中定义显式联接:

select e from Exams e join e.user u where u.id= ?#{principal.id}

附加角色entityHi@MaciejKowalski我已附加角色EntityYou尝试过为principal.id编写一个伪值吗?这将有助于缩小问题的范围。你是对的。我将principal.id硬编码为1,然后我开始工作。我认为principal.id由于某种原因没有被提取。
dependencies {
    compile 'org.springframework.boot:spring-boot-starter-thymeleaf'
    compile 'org.springframework.boot:spring-boot-starter-data-jpa'
    compile 'org.apache.tomcat:tomcat-dbcp:8.0.30'
    compile 'org.springframework.boot:spring-boot-starter-security'
    compile 'org.thymeleaf.extras:thymeleaf-extras-springsecurity4:2.1.2.RELEASE'}
@Entity
public class Exams {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String courseOffered;

    private String examType;

    private String subject;

    private String grade;

    private Long indexNumber;

    private Long gradeYear;

    private boolean isComplete;

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getCourseOffered() {
        return courseOffered;
    }

    public void setCourseOffered(String courseOffered) {
        this.courseOffered = courseOffered;
    }

    public String getExamType() {
        return examType;
    }

    public void setExamType(String examType) {
        this.examType = examType;
    }

    public String getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getGrade() {
        return grade;
    }

    public void setGrade(String grade) {
        this.grade = grade;
    }

    public Long getIndexNumber() {
        return indexNumber;
    }

    public void setIndexNumber(Long indexNumber) {
        this.indexNumber = indexNumber;
    }

    public Long getGradeYear() {
        return gradeYear;
    }

    public void setGradeYear(Long gradeYear) {
        this.gradeYear = gradeYear;
    }

    public boolean isComplete() {
        return isComplete;
    }

    public void setComplete(boolean complete) {
        isComplete = complete;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }
}
@Repository
public interface ExamsDao extends CrudRepository<Exams,Long>{
    @Query("select e from Exams e where e.user.id= ?#{principal.id}")
    List<Exams> findAll();
}
@Entity
public class User implements UserDetails {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(unique = true)
    @Size(min = 8, max = 20)
    private String username;

    @Column(length = 100)
    private String password;

    @Column(nullable = false)
    private boolean enabled;

    @OneToOne
    @JoinColumn(name = "role_id")
    private Role role;

    @OneToOne(mappedBy = "user")
    private CertificateProgramme cert;

    private String programName;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setEnabled(boolean enabled) {
        this.enabled = enabled;
    }

    public Role getRole() {
        return role;
    }

    public void setRole(Role role) {
        this.role = role;
    }

    public CertificateProgramme getCert() {
        return cert;
    }

    public void setCert(CertificateProgramme cert) {
        this.cert = cert;
    }

    public String getProgramName() {
        return programName;
    }

    public void setProgramName(String programName) {
        this.programName = programName;
    }

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        List<GrantedAuthority> authority = new ArrayList<>();
        authority.add(new SimpleGrantedAuthority(role.getName()));
        return authority;
    }

    @Override
    public String getPassword() {
        return password;
    }

    @Override
    public String getUsername() {
        return username;
    }

    @Override
    public boolean isAccountNonExpired() {
        return true ;
    }

    @Override
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    public boolean isEnabled() {
        return enabled;
    }

}
@Entity
public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
select e from Exams e join e.user u where u.id= ?#{principal.id}