2016-07-27 3 views
2

Есть ли способ Autowiring Spring Data JpaRepositories без объявления интерфейсов репозитория для каждого объекта Bean?Динамическое создание хранилищ данных весны

Как:

@Autowired 
JpaRepository<Person, Integer> repository; 

Вместо:

@Repository 
public interface PersonRepository extends JpaRepository<Person, Integer> { 
} 

@Autowired 
JpaRepository<Person, Integer> repository; 
+0

Возможно, вы могли бы упаковать их в одном определении конфигурации, но тогда вы не смогли бы сделать многое – Sarief

ответ

0

Нет, боюсь, что нет.

Интерфейс, который вы создаете и отмечаете как @Repository, используется для создания прокси-сервера, который реализует любую дополнительную функциональность, добавляемую к указанному интерфейсу.

В том случае, если вы подчеркнули выше, где вы не добавляете никаких дополнительных функций, я могу понять, почему такой подход будет привлекательным, однако я думаю, что это крайний случай, и я сомневаюсь, что было бы полезно провести весну в рассматривая его как особый случай.

Вы можете реализовать общий репозиторий самостоятельно для этого случая, если вы считаете, что это того стоит, однако я думаю, что использование интерфейсов репозитория полезно и делает код более читаемым.

+0

Ну в случае 5000 изоморфных сущностей, разделяющих первичный ключ 'Integer' @StuPointerException EDIT: Но они созданы весной в время выполнения, поэтому должна быть функциональность. – calaedo

+0

Не конкретный класс, а прокси. При запуске. Как система может знать, сколько бобов вам нужно? – Sarief

1

Так я узнал, что есть обходной путь с помощью SimpleJpaRepository:

@PersistenceContext 
EntityManager entityManager; 


JpaRepository<Person, Integer> repository = new SimpleJpaRepository<>(Person.class, entityManager); 

Это немного Hacky (и не autowireable), но она работает.

+1

Чтобы тогда было легко, вы могли бы определить их в конфигурации – Sarief

+0

@Sarief, можете ли вы привести пример? – calaedo

+0

дай мне 10 часов, я занят atm) – Sarief

Смежные вопросы