2016-06-09 3 views
1

В моем проекте я должен реализовать возможность многопользовательской аренды (для каждого клиента). Идея состоит в том, чтобы сохранить атрибут (customer_id) в каждом объекте для разделения.Spring-JPA: продлить запрос JPA в целом

Чтобы получить данные для одного клиента, мне нужно расширить SQL с помощью этого атрибута.

Пример:

billRepository.findByDateAndCustomerId(date, customerId); 

результат

select * from bill where date = ? and customer_id = ? 

Но я хочу, чтобы иметь метод, как

billRepository.findByDate(date); 

и результат должен быть таким же, как и выше.

select * from bill where date = ? and customer_id = ? 

Есть ли возможность вводить customer_id в общем виде (например, SQL препроцессор)? Любая идея, как это сделать с spring-jpa или JPA (спящий режим)?

Благодаря Chokdee

ответ

-1

Я сомневаюсь, что JPA Апи, ни Hibernate или любой другой основы ORM предоставляет такую ​​возможность. Это будет сложно использовать. Поскольку customer_id не является константой, как вы могли бы поместить правильное значение? Как вы узнаете, какие запросы должны измениться, а какие нет?

Хуже того, по-моему, это были бы танго. Изменение запроса скрытым способом может позволить SQL Injection.

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

+0

Хотя плакат просит JPA, и это не JPA, так что, возможно, перепишите то, что вы положили, используя критерии JPA? –

+0

Простите, возможно, это было непонятно. Но я имею в виду не использовать SQL напрямую. Использование JPA для инъекции customer_id скрытым способом. – chokdee

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