Не удается использовать службу репозитория Autowire Spring JPA

89
10

Я пытаюсь использовать репозиторий User в своем коде, но intellij дает мне ошибку.


interface is not allowed for non abstract beans

У меня есть следующая настройка.


@Entity
public class User {

@Id
private long id;
private String firstName;
private String lastName;
private String profileUrl;
private String email;
private String location;

protected User(){};

public User(String first, String last, String profileUrl, String email, String location){
this.firstName = first;
this.lastName = last;
this.profileUrl = profileUrl;
this.email = email;
this.location = location;

}

public User(Person person){
this.firstName = person.getName().getGivenName();
this.lastName = person.getName().getFamilyName();
this.profileUrl = person.getImage().getUrl();
this.email = person.getEmails().get(0).getValue();
this.location = person.getCurrentLocation();
}
}

public interface UserRepository extends CrudRepository<User, Long> {

List<User> findByProfileId(long id);
}


Я попытался аннотировать это с помощью @Service и @Repository, но безрезультатно.


@Component
public class UserRepositoryImpl {

@Autowired
private UserRepository userRepository;

public void doSomething() {
List<User> byProfileId = userRepository.findByProfileId(100);
}
}


XML


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:rep="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/data/jpa
http://www.springframework.org/schema/data/jpa/spring-jpa.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<rep:repositories base-package="com.planit.persistence.*"/>
<bean id="userRepository" class="com.planit.persistence.registration.UserRepository"/>

<!-- DB CONNECTION-->
<bean class="java.net.URI" id="dbUrl">
<constructor-arg value="#{T(com.ProjectUtils).getDBUrl()}"/>
</bean>

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url"
value="#{ 'jdbc:postgresql://' + @dbUrl.getHost() + ':' + @dbUrl.getPort() + @dbUrl.getPath() }"/>
<property name="username" value="#{ @dbUrl.getUserInfo().split(':')[0] }"/>
<property name="password" value="#{ @dbUrl.getUserInfo().split(':')[1] }"/>
</bean>

<bean id="myEmf"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="packagesToScan" value="com.planit.persistence"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true"/>
<property name="generateDdl" value="true"/>
<property name="database" value="POSTGRESQL"/>
</bean>
</property>
</bean>

<bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="myEmf"/>
</bean>

<tx:annotation-driven transaction-manager="txManager"/>
</beans>


Ошибка в строке моего spring.xml, где я определяю свой userRepository bean.


Спасибо заранее.

спросил(а) 2021-01-25T14:16:09+03:00 4 месяца, 4 недели назад
1
Решение
99

@Repository отсутствует, попробуйте добавить выше интерфейса репо и удалить объявление bean, которое не разрешено в Spring.

ответил(а) 2021-01-25T14:16:09+03:00 4 месяца, 4 недели назад
62

Мне кажется, вам просто нужно удалить эту строку:


<bean id="userRepository" class="com.planit.persistence.registration.UserRepository"/>

Смотрите документы SpringData здесь.

ответил(а) 2021-01-25T14:16:09+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема