2015-06-11 5 views
0

У меня есть следующиеSpring Data - Spring Repository: выбор различных значений для атрибута класса

@Entity 
public class Restaurant{ 

    @ManyToOne 
    private City c; 
    // more 
} 

@Entity 
public class City{ 

    private String name; 
    // more 
} 

Я также есть хранилище

public interface RestaurantRepository extends JPARepository<Restaurant, Long> { 
// something to put here 
} 

=== EDIT ==== У меня есть список ВСЕХ городов, но только некоторые из них связаны с ресторанами.

Мне нужно написать метод в таком репозитории, чтобы извлечь все города, на которые ссылается ресторан.

В SQL я бы просто сделать следующее:

SELECT CITY.id, CITY.name FROM CITY WHERE ID NOT IN (SELECT DISTINCT(city_id) FROM RESTAURANT) 

Есть ли способ, чтобы получить тот же результат, используя соглашения имя как в http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html?

Спасибо.

+0

Ресторан, в имеет отношения к ** ** один город в соответствии с вашим отображением поэтому ваш вопрос не имеет смысла. –

+0

Я обновил свой вопрос, чтобы уточнить. У меня есть список ВСЕХ городов. У меня есть рестораны, приезжающие только из некоторых городов. Я хотел бы знать, в каких городах нет ресторанов. Поэтому я хочу извлечь все отдельные города из таблицы ресторанов. В sql я бы просто написал «SELECT distinct (city_id) из ресторана». Чтобы извлечь полную запись города, я бы просто присоединился к таблице города. Последнее, что я хочу получить: список всех городов, для которых не было ресторанов. – Manu

ответ

0

Как я не вижу никакой поддержки для IS [NOT] ПУСТОЙ оператор, указанный в документации Spring Data вокруг стратегии создания запросов, вы можете попробовать вручную определяя JPQL запрос:

public interface CityRepository extends JPARepository<City, Long> { 

    @Query(value="SELECT c FROM CITY c WHERE c.restaurants IS EMPTY") 
    List<City> findCitiesWithNoRestaurants(); 

} 

который я угадывание будет переводить на собственный SQL, который вы дали в качестве примера.

В противном случае вам нужно будет найти список городов с Restraunts, а затем передать это методу, который использовал шаблон NotIn. Очевидно, что это будет менее результативно, чем указано выше.

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation

+0

Это не кажется жизнеспособным решением для моего контекста. Вот почему я ищу, чтобы определить метод в соответствии с пунктом 2.3 ссылки, которую я опубликовал, в соответствии с методом вывода на основе метода JPA. – Manu

+0

Ну, я, очевидно, все еще не понимаю ваш вопрос, так что удачи. –

+0

Потому что я привязываю свою структуру базы данных к своему приложению. Я бы очень этого избегал. Например, мне нужно предположить, что у меня есть таблица «ГОРОД», таблица «РЕСТОРАН» и поле «city_id» в этой последней таблице. Мой домен на самом деле сложнее, чем я представил в своем вопросе (у меня есть иерархия для ресторанов и городов). Насколько это возможно, я бы хотел избежать собственных запросов. Есть ли другой путь, которым я могу следовать? Вместо собственного запроса я бы выполнил выбор городов на уровне приложений. – Manu

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