![](/img/trans.png)
[英]Spring boot factoryBean threw exception on object creation
[英]Error creating bean with name 'userRepository': FactoryBean threw exception on object creation
我有一个错误,我不知道为什么? 我使用 Spring Boot Spring Security + JWT 编写了一个登录名。 但是我有一个奇怪的存储库错误。
我已经尝试这样做了几个小时,但我已经没有力气了。 我不知道这很重要,但我用作基础 PostgreSQL
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalArgumentException: Failed to create query for method public abstract java.util.Optional com.tiscode.xxxxx_api.repository.UserRepository.findByName(java.lang.String)! No property name found for type User!
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:176) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1828) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1265) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:624) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:612) ~[spring-beans-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at org.springframework.data.repository.config.DeferredRepositoryInitializationListener.onApplicationEvent(DeferredRepositoryInitializationListener.java:51) ~[spring-data-commons-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.data.repository.config.DeferredRepositoryInitializationListener.onApplicationEvent(DeferredRepositoryInitializationListener.java:36) ~[spring-data-commons-2.3.5.RELEASE.jar:2.3.5.RELEASE]
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.2.10.RELEASE.jar:5.2.10.RELEASE]
at
存储库接口
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByName(String user);
我的 UserDetalsServiceImp
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
UserRepository userRepository;
@Override
@Transactional
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
User user = userRepository.findByName(userName)
.orElseThrow(() -> new UsernameNotFoundException("User Not Found with username: " + userName));
return UserDetailsImpl.build(user);
}
}
还有我的实体用户类
@Entity
@Table(name = "Users")
public class User {
@Id
@GeneratedValue
private Long id;
private String email;
private String userName;
private String password;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable( name = "user_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<UserRole> userRoles = new HashSet<>();
public User(String username, String email, String password) {
this.userName = username;
this.email = email;
this.password = password;
}
public User() {
}
....
User
对象上的属性称为userName
,而不是name
。
这就是 Spring 抱怨“找不到用户类型的属性名称!”的原因。
请尝试以下操作:
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByUserName(String user);
}
首先请重命名方法和参数。 应该:
Optional<User> findByUserName(String userName);
并请删除“@Repository”注释
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.