Java 创建名为';用户存储库';:FactoryBean在创建对象时引发异常
我有一只虫子,我不知道为什么?我使用SpringBootSpringSecurity+JWT编写了一个登录。但我有一个奇怪的存储库bug 我已经试着这样做了好几个小时了,但是我已经没有力气了。我不知道这有什么关系,但我使用PostgreSQL作为基础Java 创建名为';用户存储库';:FactoryBean在创建对象时引发异常,java,spring,spring-boot,spring-security,jwt,Java,Spring,Spring Boot,Spring Security,Jwt,我有一只虫子,我不知道为什么?我使用SpringBootSpringSecurity+JWT编写了一个登录。但我有一个奇怪的存储库bug 我已经试着这样做了好几个小时了,但是我已经没有力气了。我不知道这有什么关系,但我使用PostgreSQL作为基础 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userRepository': FactoryBean threw e
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);
和我的实体用户类
@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() {
}
....
@实体
@表(name=“Users”)
公共类用户{
@身份证
@生成值
私人长id;
私人字符串电子邮件;
私有字符串用户名;
私有字符串密码;
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“用户角色”,
joinColumns=@JoinColumn(name=“user\u id”),
inverseJoinColumns=@JoinColumn(name=“role\u id”))
private Set userRoles=new HashSet();
公共用户(字符串用户名、字符串电子邮件、字符串密码){
this.userName=用户名;
this.email=电子邮件;
this.password=密码;
}
公共用户(){
}
....
用户对象上的属性称为用户名
,而不是名称
这就是为什么Spring抱怨“找不到用户类型的属性名!”
请尝试以下操作:
public interface UserRepository extends JpaRepository<User, Long> {
Optional<User> findByUserName(String user);
}
public interface UserRepository扩展了JpaRepository{
可选findByUserName(字符串用户);
}
首先请重命名方法和参数。应为:
Optional<User> findByUserName(String userName);
可选findByUserName(字符串用户名);
请删除“@Repository”注释类路径中是否有用户实体?能否显示您的用户实体?似乎您没有名为“name”的字段。36ve@JeannotMn我刚刚添加了用户实体您将列命名为“name”而不是“userName”
Optional<User> findByUserName(String userName);