2014-11-01 12 views
5

Poprzednio używałem Hibernate i teraz próbuję zrozumieć JDBC. Przeprowadziłem wiele badań w Spring JDBC, ale nadal nie mogłem zrozumieć, jak tworzyć relacje między obiektami.Mapowanie obiektów w Spring JDBC?

Załóżmy mam produkt:

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

//constructor, getters and setters. 
} 

a klientem:

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

//constructor, getters and setters 
} 

Zależność pomiędzy Klientem a produktem jest @OneToMany. Jak poprawnie zapisać produkt i obiekty klienta w bazie danych za pomocą SpringJDBC? Dziękujemy

+0

Nie musisz. Korzystasz ze struktury JPA. Jak hibernacja. –

+0

Czy można to zrobić za pomocą Spring JDBC? – Bravo

+0

Czy istnieje jakiś sposób na przeprawienie się przez Atlantyk samochodem? Tak, jasne - zbudowałem łódź i położyłem na niej samochód. Lub możesz po prostu użyć łodzi. –

Odpowiedz

4

To sprawi, że wiele sensu się w kilku przypadkach, aby nie używać pełnowartościowy ORM ale opierają się na niższym poziomie abstrakcji, jak wiosna JDBCTemplate i RowMapper. iBatis przychodzi mi na myśl. I to ma sens nawet w dużych rozwiązaniach dla przedsiębiorstw.

Jeśli opuścisz pełny świat ORM, będziesz musiał sam wykonać dodatkową pracę. Na przykład można napisać zapytanie SQL z łączeniem, zwracając wszystkie pola klienta i wszystkie produkty tego klienta, i iterować za jego pomocą, aby odwzorować wszystko na obiekt Java. W niektórych przypadkach kod może być równie czysty, jak w przypadku ORM.

piśmie wszystkie te dane jest bardziej brudny, szczególnie jeśli trzeba zoptymalizować dla rzeczy, które nie zostały zanieczyszczone.

Najlepszy przypadek użycia mogę myśleć jest przetwarzanie wsadowe, gdzie kontrola nad dostępem do danych staje się ważniejszy i wyższy poziom abstrakcji niekoniecznie sprawi, że bardziej wydajne.

0

Jeśli dobrze rozumiem twoje pytanie, jeśli uważasz, że nie korzystasz z ORM, musisz to zrobić ręcznie. W twojej klasie DAO dla Klienta, najpierw musiałbyś przechowywać wszystkie produkty.

Alternatywą może być utworzenie procedury składowanej w bazie danych i uporządkowanie jej w taki sposób.
To może być obsługiwane bardzo dobrze przez Spring JDBC, wadą jest to, że musisz zarządzać Javą i procedurami przechowywanymi. W twoim przypadku może to być nadal dwie przechowywane procedury.

Istnieje również możliwość, że QueryDSL i Jooq, myśli nie miałem szansy na dobre spojrzenie na nich.

ja osobiście jak Procedura składowana rozwiązanie dla mnie dodatkowy nad głową warto, wiem, inni nie zgodzić, ale ja po prostu nie lubię/kupić ofertę ORM.

+0

Nie ma powodu, dla którego nie można używać [procedur przechowywanych z ORM] (http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Stored_Procedures). –

+0

Dzięki Boris, nie jestem pewien czy wiedziałem, że będę czytał, może przydać się :) – Gavin

1

Jeśli jesteś gotów rozważyć coś innego niż wiosną lub hibernacji, sormula może robić to, co można opisać. Zobacz przykład one to many. Jeśli wymienisz klucz obcy po wielu stronach, taki sam jak klucz podstawowy z jednej strony, nie potrzebujesz adnotacji.

Aby zapisać odniesienie do obiektu jednostronnego (klienta) w obiektach wielostronnych (Produkty), można użyć parametru OneToManyCascade#foreignKeyReferenceField. Na przykład wyszukaj testy w projekcie dla "foreignKeyReferenceField".

Powiązane problemy