我是 Spring Security 的新手,我正在使用 spring-security 构建应用程序 AuthSystems,而 Msql 正在使用 JpaRepository 中的外部查询方法,并且该方法不返回结果,并显示 IncorrectResultSizeDataAccessException。

这是我的代码

用户库

package com.ganesh.repository;


import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;

import com.ganesh.model.User;


public interface UserRepository extends JpaRepository<User, Integer> {

    User findByUsername(String username);
        
}

自定义用户详细信息服务

@Service
public class CustomUserDetailsService implements UserDetailsService {
    
    @Autowired
    private UserRepository userRepo;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        
        User user = userRepo.findByUsername(username);
        
        
        CustomeUserDetail userdetails = null;
        
        if(user != null) {
            
            userdetails = new CustomeUserDetail();
            
            userdetails.setUser(user);
        
            
        }else {
            throw new UsernameNotFoundException("User not fond this username"+ username);
        }
        return userdetails;
        
        
    }

}

客户详细信息


@Getter
@Setter
public class CustomeUserDetail implements UserDetails {
    
    /**
     * 
     */
    private static final long serialVersionUID = -8354447536649796292L;
    
    
    @Autowired
    private User user;

    @Override
    public Collection<? extends GrantedAuthority> getAuthorities() {
        
        return user.getRoles().stream().map(role -> new SimpleGrantedAuthority("ROLE_"+ role)).collect(Collectors.toList());
    }

    @Override
    public String getPassword() {
        
        return user.getPassword();
    }

    @Override
    public String getUsername() {
        
        return user.getUsername();
    }

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

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

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

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

}
#properties
spring.datasource.url=jdbc:mysql://${MYSQL_HOST:localhost}:3306/spring_auth
spring.datasource.username=root
spring.datasource.password=root
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.propertirs.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.format_sql=true

请帮我...

#1楼 票数:3

您的数据库表中似乎有多个用户具有相同的用户名。 所以User findByUsername(String username); 返回多个结果。

您可以执行以下操作之一:

  1. 使您的数据库中的 username-Column 唯一。
  2. 将您的存储库方法更改为List<User> findByUsername(String username); 获取具有该用户名的所有用户。
  3. 将您的存储库方法更改为User findFirstByUsername(String username); 只获得一个(随机)用户。

  ask by Ganesh Kumar translate from so

未解决问题?本站智能推荐:

2回复

弹簧数据产生不必要的唯一约束

我有一个春季启动应用程序,并使用以下用户模型类。 一旦我加载了Spring Boot应用程序,它就会自动为sdmForCircle,userWorkingForOperator和techLeadForNode创建表,但是这些表是在不必要的唯一约束下创建的。 我想停止自动添加的唯一约束。
1回复

spring jpa 加入和查询存储库

我有这样的User类: 像这样的电影类: 我还有一个像这样的 UserMovieRole 类: 现在我想查询UserMovieRole并选择给出 userID 和 movieID 的位置。 在 sql 中我可以简单地编写,我可以简单地编写一个 join 和 where sql 来选择。
2回复

创建数据库查询Spring boot JPA?

我是Spring Boot的新手,我需要创建一个findByCode方法,该方法与findById()有点相似,但是使用Long代码而不是Long id(代码不是主键)。 数据库时间表映射(id,开始,结束,日期,代码) 时间表映射视图 时间表映射 timeTable
1回复

单个自定义MySQL查询或多个Hibernate查询,哪个更有效?

我必须从5个表中获取所有列。 结果集最多可返回1000行。 在MySQL中编写单个自定义查询以获取所有数据还是使用5个Hibernate查询来获取数据是否更好? 条件-在表1中,索引是主键和在其上对数据库进行分区的另一列的组合。 在其余表中,表1的主键是外键,并且在其余表中具有用
1回复

SpringBoot在查询所有记录时无法找到MySQL表

我有SpringBoot-MySQL应用程序,我在其中使用controller来查询表中的所有记录并将其显示在Thymeleaf页面上。 但是错误表明它无法找到该表。 我检查了表名,它确实是CF_JOB_CONTROLLER 。 不确定如何减小表名的大小写并在其前面附加模式名称。 错
1回复

是否可以使用行不唯一的 JPA 存储库删除单行?

这是一个糟糕的数据库设计。 该表如下,其中两列都是外键。 该设计是由其他人创建的。 我知道这是违规行为,不应该这样做。 我将改变实体。 在改之前,我只想知道在这种匹配结果很多的情况下是否可以删除单行。 对于上面的查询,它会删除多条记录,我只想删除一条或一条。
2回复

在Spring Boot中生成动态查询

我有一个本地Mysql查询 为此,我可以编写JPQL而不是本机查询。 可是如何才能让使用相同的查询JPA Specification ,因为在该列或字段where条件c_id , m_id , t_id和u_id是选配。 它们是提供给用户的过滤器选项。 可以使用if条件完成本机
2回复

Spring Data JPQL如何使用动态where子句创建查询?

我正在创建自定义JPQL查询以获取一些数据。 在某些情况下,我想根据参数值是否为非null来添加where子句。 例如等效的sql查询: 有人可以帮我吗。