2014-11-01 2 views
5

Я ранее использовал Hibernate, и теперь я пытаюсь понять JDBC. Я провел много исследований Spring JDBC, но все же я не мог понять, как создавать отношения между объектами.Отображение объектов весной JDBC?

Предположим, у меня есть продукт:

public class Product { 
private Long id; 
private String nam; 
private Customer customer; 

//constructor, getters and setters. 
} 

и Заказчик:

public class Customer { 
private Long id; 
private String name; 
private List<Product> products = new ArrayList<Product>(); 

//constructor, getters and setters 
} 

Отношения между Клиентом и продукт является @OneToMany. Как правильно сохранить товар и объекты клиента в db с помощью SpringJDBC? Спасибо

+0

У вас нет. Вы используете структуру JPA. Как Hibernate. –

+0

Есть ли способ сделать это с помощью Spring JDBC? – Bravo

+0

Есть ли способ пересечь Атлантику в машине? Да, конечно - построил лодку и положил на нее машину. Или вы могли бы просто использовать лодку. –

ответ

4

В некоторых случаях очень важно не использовать полномасштабную ORM, но полагаться на более низкий уровень абстракции, например Spring JDBCTemplate и RowMapper. iBatis также приходит на ум. И это имеет смысл даже в крупных корпоративных решениях.

Если вы покинете весь мир с ОРВ, вы должны будете выполнить дополнительную работу самостоятельно. Например, вы можете написать SQL-запрос с соединением, возвращая все поля клиента и все продукты этого клиента и перебирать его, чтобы сопоставить все это с объектом Java. В довольно многих случаях код может быть таким же чистым, как и у ORM.

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

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

0

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

Альтернативой может быть создание Хранимой процедуры в базе данных и устранение правильной настойчивости.
Это может быть очень хорошо обработано Spring JDBC, недостатком является то, что вы знаете, что нужно управлять Java и хранимыми процедурами. В вашем случае это может быть две хранимые процедуры.

Существует также вероятность того, что QueryDSL и Jooq, подумал, что у меня не было возможности хорошо смотреть на них.

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

+0

Нет причин, по которым вы не можете использовать [хранимые процедуры с ORM] (http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Stored_Procedures). –

+0

Спасибо, Борис, я не уверен, что знаю это, я прочитаю, что это может пригодиться :) – Gavin

1

Если вы желаете рассмотреть что-то другое, кроме весны или спящего режима, sormula может делать то, что вы описываете. См. Пример one to many. Если вы назовите внешний ключ на стороне со стороны так же, как первичный ключ с одной стороны, то вам не нужны аннотации.

Чтобы сохранить ссылку на односторонний объект (Заказчик) в многосторонних объектах (Продукты), вы можете использовать OneToManyCascade#foreignKeyReferenceField. Например, найдите тесты в проекте для «foreignKeyReferenceField».

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