2014-11-01 19 views
5

Ho usato in precedenza Hibernate e ora sto cercando di capire JDBC. Ho fatto un sacco di ricerche su Spring JDBC, ma ancora non riuscivo a capire come creare relazioni tra gli oggetti.Mappatura degli oggetti in Spring JDBC?

Si supponga Ho un prodotto:

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

//constructor, getters and setters. 
} 

e un cliente:

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

//constructor, getters and setters 
} 

Il rapporto tra il Cliente e del prodotto è @OneToMany. Come salvare correttamente il prodotto e gli oggetti cliente nel db usando SpringJDBC? Grazie

+0

Non è così. Si utilizza un framework JPA. Come Hibernate. –

+0

Esiste comunque lo stesso utilizzando Spring JDBC? – Bravo

+0

C'è un modo per attraversare l'Atlantico in auto? Sì, certo: costruisci una barca e mettici sopra l'auto. O potresti semplicemente usare una barca. –

risposta

4

In molti casi è molto utile non utilizzare un ORM completo ma affidarsi a un livello di astrazione più basso, come Spring JDBCTemplate e RowMapper. Mi viene in mente anche iBatis. E questo ha senso anche nelle grandi soluzioni aziendali.

Se si abbandona il mondo ORM in piena regola, si dovrà fare da soli un ulteriore lavoro. Ad esempio, è possibile scrivere una query SQL con un join, restituendo tutti i campi cliente e tutti i prodotti di tale cliente e scorrere attraverso di essa per mappare tutto ciò su un oggetto Java. In alcuni casi, il codice può essere pulito come quello che si avrebbe con un ORM.

Scrivere tutti questi dati è più complicato, soprattutto se è necessario ottimizzare per cose che non sono state sporcate.

Il caso d'uso migliore che posso pensare è l'elaborazione in batch, in cui il controllo dell'accesso ai dati diventa più importante e il livello più alto di astrazione non rende necessariamente più produttivi.

0

Se ho capito bene la tua domanda, se pensi che non stai usando l'ORM dovresti farlo manualmente. Nella tua classe DAO per Cliente, prima dovresti conservare tutti i prodotti.

Un'alternativa potrebbe essere quella di creare una stored procedure sul database e mantenere la persistenza corretta.
Questo può essere gestito molto bene da Spring JDBC, lo svantaggio è che è necessario gestire Java e stored procedure. Nel tuo caso potrebbero essere ancora due stored procedure.

C'è anche la possibilità che QueryDSL e Jooq pensino che non ho avuto la possibilità di dare un'occhiata a loro.

Personalmente, mi piace la soluzione Stored Procedure, per me è valsa la pena aggiungere extra, so che gli altri non sono d'accordo, ma semplicemente non mi piace/compro l'affare ORM.

+0

Nessun motivo per cui non è possibile utilizzare [stored procedure con ORM] (http://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Stored_Procedures). –

+0

Grazie Boris, non sono sicuro di saperlo, avrò una lettura che potrebbe tornare utile :) – Gavin

1

Se si è disposti a considerare qualcosa di diverso dalla primavera o ibernato, sormula può fare ciò che descrivi. Vedere l'esempio one to many. Se si nomina la chiave esterna su più lati uguale alla chiave primaria su un lato, non è necessario alcun commento.

Per memorizzare un riferimento a oggetto a un lato (Cliente) negli oggetti a più lati (Prodotti), è possibile utilizzare OneToManyCascade#foreignKeyReferenceField. Ad esempio, cercare i test nel progetto per "foreignKeyReferenceField".

Problemi correlati