原创

升级到 Spring boot 3 data jpa 时 JPA 查询不起作用

温馨提示:
本文最后更新于 2024年04月12日,已超过 48 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我

Currently we are using Spring Boot 2.7 and Java 11. We are trying to upgrade to Spring boot 3.2.4 and Java 17.

@Entity
@Table(name = "user_token")
public class UserToken extends {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "user_token_id")
    private Long userTokenId;

    @OneToOne
    @JoinColumn(name = "user_id", referencedColumnName = "user_id", nullable = false)
    private User user;

    @Column(name = "user_token", length = 100, unique = true)
    @NotNull
    private String userToken;

}


@Repository
public interface UserTokenRepository extends JpaRepository<UserToken, Long> {
    @Query("Select ut.user From UserToken ut Where ut.userToken = :accessToken and ut.isActive = 1")
    User retrieveUserByToken(String accessToken);
}

I am getting following error:

Exception encountered during context initialization - cancelling refresh attempt: 
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with 
name 'userTokenRepository' defined in com.dao.repository.security.UserTokenRepository defined 
in @EnableJpaRepositories declared on SecurityServiceApplication: Could not create query for 
public abstract com.dao.domain.security.User 
com.dao.repository.security.UserTokenRepository.retrieveUserByToken(java.lang.String); 
Reason: Validation failed for query for method public abstract com.dao.domain.security.User 
com.dao.repository.security.UserTokenRepository.retrieveUserByToken(java.lang.String)

Also tried with below @Query but getting same error:

@Query("Select u From UserToken ut INNER JOIN ut.user u Where ut.userToken = :accessToken and ut.isActive = 1")

If I use native query its working fine, But JPA queries are not working in Spring boot 3.2.4 . and Same code worked with Spring boot 2.7. Can anyone help me here on how to proceed ? Any config or code change required ?

正文到此结束
热门推荐
本文目录