Come posso generare le classi di entità Hibernate hmm xml & da uno schema DB esistente?Generazione di Hibernate hbm xml classi e classi di entità dallo schema DB esistente
risposta
Suggerirei Hibernate Tool
Si consiglia di utilizzare gli strumenti di ingegneria inversa Hibernate per questo. Vedere lo hibernate reverse engineering tools documentation per ulteriori informazioni.
Non mi è chiaro come generare classi annotate JPA, ma potresti voler pensare di non utilizzare più i file hbm.xml se questo è un nuovo progetto, favorendo le annotazioni.
Ho usato Hibernate Tools (esempi forniti sul loro sito) con molto piacere. Di seguito, fornisco dettagli sul mio caso d'uso specifico, avanzato e interessante (credo).
In realtà, stavo affrontando una sfida interessante sul nostro grande progetto (si avvicina a 800 tabelle, di database squadra guidata)
- nuove tabelle manterrebbero in arrivo, così li ho potuto generare dal database (utilizzando HibernateTools e producendo entità annotate) (attualmente stiamo usando un altro processo ...)
Ma le tabelle dei mosts non erano nuove, avevo già le implementazioni java e il file .hbm.xml. Entrambi erano stati a volte modificati dal DB con cui erano stati originariamente generati, quindi era impossibile rigenerarli con la garanzia di non rompere nulla. Avevo bisogno di migrare le Entità, cambiando il meno possibile (cioè solo le annotazioni)!
Questo doveva essere veloce anche perché le nostre entità tipiche vecchie hanno circa 100 membri (proprie colonne db, oltre a collezioni di entità provenienti da chiavi esterne inversa!).
Nota: due entità non possono essere compilate con un full-constructor generato, hanno superato il limite di 256 parametri! Tuttavia, sebbene questo Costruttore fosse comunque inutile, chi poteva ricordare l'ordine di 256 parametri, quindi l'ho rimosso.
- Volevo anche migrare i miei set su quelli generici (ad eccezione del setter con cui non mi sono occupato per ora).
Per la migrazione di mappatura, ho usato Hibernate Tools (personalizzati in base alle esigenze, il modello e il codice) come segue:
la fonte delle informazioni è stato il file .hbm.xml, con il file hibernate.cfg.xml
Nota: ho dovuto prima estrarre il file hibernate.cfg.xml, sostituendo il bean spring che era solito contenere l'elenco. Ma questo era utile anche per gli strumenti di database come Squirrel, che poteva usarlo per abilitare il completamento HQL ...
l'output generato era file X2.java (per X.classe java, nella stessa confezione) contenente solo i campi, getter e annotazioni (nessun setter o costruttori) (Imposta generici)
vorrei utilizzare il compilatore Eclipse (errore di "duplice ...") per ricontrolla il mio editing, per renderlo più veloce e meno soggetto a errori (l'errore non era un'opzione, abbiamo molti clienti in produzione!). Per ogni classe migrato, vorrei copiare da generato alla classe esistente:
- cambiamento persistence.cfg.xml di utilizzare la classe al posto del .hbm.xml
- taglia e incolla @Entity prima nome della classe
- taglia e incolla tutti i campi Set dopo i campi esistenti, elimina solo quelli esistenti che hanno un errore di compilazione (il risultato è che ora ho campi con Set generici)
- taglia e incolla tutti i getter (che è il resto del classe) dopo i setter esistenti
- aprire la vista struttura, mostrando solo dy pubblico i metodi namici non iniziano con 'set', ordinati alfabeticamente
- controllare ciascun getter che non ha errori (verificare se qualcosa è andato storto o è stato eliminato da ...)
- seguendo la vista struttura, considerando solo metodi errati , per ciascun getter nell'ordine: elimina la seconda istanza del metodo, copia le sue annotazioni nella prima istanza (navigazione utilizzando la vista struttura) (l'ordine dei metodi nella classe viene mantenuto, che è stato importante per la cronologia CVS , in particolare nel dimostrare ai non credenti che la migrazione non ha infranto il loro codice, era già stato rotto prima!).
- ... alcuni dettagli lasciati per ulteriori discussioni ...
Per i curiosi, questo mese siamo quasi 200 entità annotati :-). Una tipica entità di 100 campi richiede circa 30 minuti di lavoro per la migrazione. Mancano solo 300 ore per finire questo cut'n paste per le restanti 600 entità! ;-)
"Nota: Due entità non possono essere compilate con un full-constructor generato, hanno rotto il limite di 256 parametri! Ma io per quanto questo Constructor fosse comunque inutile, chi poteva ricordare l'ordine di 256 parametri, quindi l'ho rimosso." - COME?? L'hai appena cancellato post-build? Sai come specificare in un hbm che non dovrebbe essere generato un costruttore completo? – WhyGeeEx
Netbeans ha funzionalità per la generazione di file di configurazione, file annotati e altro
- 1. Hibernate/JPA DB Best practice per lo schema di generazione
- 2. Generazione schema di annotazioni Maven + Hibernate
- 3. Generazione di entità C# da DB esistente e Fluent NHibernate mapping automatico
- 4. Avvio a molla. Crea automaticamente classi di entità dallo schema MySql
- 5. Generazione di classi JAXB con nomi di classi personalizzate
- 6. XCode 4 Generazione di classi da entità in CoreData
- 7. Generazione dinamica classi di riferimento
- 8. hibernate 4.3.x - carica tutte le classi annotate entità
- 9. Aggiunta classi entità dinamicamente a runtime
- 10. Codice schema entità indipendente dallo schema Prime migrazioni
- 11. H2 DB in Spring Boot Hibernate non genera Db Schema
- 12. Utilizzare in modo programmatico la funzionalità dello strumento XSD.exe (generare classi dallo schema XSD) tramite le classi .NET Framework?
- 13. Combinazione di classi condizionali con classe esistente
- 14. Quando le Entità-Classi sono migliorate e per cosa? jpa, spring, hibernate, javassist
- 15. Generazione di dati fittizi JSON Python dallo schema JSON
- 16. Generazione di classi Java da XMLSchema.xsd usando JAXB
- 17. Dovremmo inserire classi, enumerazioni e altre entità nei propri file?
- 18. Hibernate associazione di entità one-to-one con PK condiviso tra 3 classi
- 19. Genera classi c obiettive dallo schema XSD come JaxB in Java?
- 20. C# - serializzazione XML di classi derivate
- 21. Strumento C++ per generare file XML casuali dallo schema XML?
- 22. JBoss 5.1: Classi di entità non trovate (vfszip)
- 23. Entità DTD vs XML-Schema Elementi
- 24. Aggiunta di classi di dimensioni a un progetto Xcode esistente
- 25. Generazione automatica di classi di simulazione per gmock
- 26. LinqToSql e di base astratta classi
- 27. Hibernate: migrazione dalla mappatura alle annotazioni - è possibile mescolare hbm e annotazione?
- 28. InflateException: riga file binario XML n. 8: errore durante la generazione di classi ImageView
- 29. Associazioni di classi e liste
- 30. Estensione di classi e istanze
Il tuo link sembra essere rotto. Ho trovato qualche link che potrebbe essere rilevante ma non sono sicuro quale sia il migliore. Sareste in grado di ritrovarlo e correggere il collegamento interrotto? Grazie – ForceMagic