2009-06-25 11 views
31

Sto cercando un modo veloce (molto veloce) per testare le modifiche alle query di ibernazione. Ho una grande applicazione con migliaia di diverse query HQL (in file XML) e 100+ classi mappate e non voglio ridistribuire l'intera applicazione per testare solo una piccola modifica a una query.Come testare le query HQL?

Come apparirebbe una buona configurazione per liberarmi dalla ridistribuzione e abilitare un controllo rapido delle query?

risposta

14

Con IntelliJ IDEA 8.1.3 la mechnism di scelta si chiama 'Facet'. Per verificare istantaneamente le query HQL:

  1. creare un'origine dati Strumenti -> Origine dati, Aggiungi origine dati, definire conducente, username e password di sviluppo yor db
  2. nel caso in cui non avete già un hibernate.cfg o si configura la factory di sessione in un modo diverso rispetto a tramite xml: creare un ibernazione.file cfg che fa riferimento a tutte le mappature XML (definisci un nome per la factory di sessione, solo per una più facile gestione)
  3. in 'Struttura progetto' aggiungi Facet al tuo modulo di scelta e assegna l'origine dati definita di recente al nuovo facet
  4. a Java EE Visualizza
  5. aperte Hibernate sfaccettature - Nodo
  6. clic destro fabbrica Session e scegli "Apri HQL console"
  7. inserisci query HQL in consolle ... e vi trovate fatto.

scusa per questa domanda RTFM.

+2

Ulteriori informazioni sul supporto HQL in IntelliJ sono disponibili qui: http://www.jetbrains.com/idea/features/java_hibernate.html –

+3

Se si utilizza netbeans, è sufficiente fare clic con il pulsante destro del mouse su hibernate.cfg.xml, probabilmente seduto nel pacchetto predefinito e selezionare "Effettua query HQL" –

+0

Guida dettagliata sull'ultima versione: http://www.jetbrains.com/idea/webhelp/hibernate.html – Vadzim

10

È possibile utilizzare hibernate tools in eclipse per eseguire query. Questo ti permetterà di eseguire HQL ogni volta che vuoi provare qualcosa.

Se si utilizza IntelliJ, vi è Hibero.

C'è un standalone editor da sole, ma non l'ho provato.

+0

fa esiste una soluzione (= plug-in, qualsiasi altra cosa) per IntelliJ IDEA 8? – Chris

+0

Ho aggiunto un collegamento a Hibero. – stevedbrown

+0

sì, thxn. se funziona come lo descrivono, è esattamente quello di cui ho bisogno, ma: "Dal 1 ° gennaio 2008 .. Hibero ™ è stato interrotto per motivi di lavoro.", quindi cosa succede ora? – Chris

3

Eseguo il test delle query HQL in unit test con il database HSQLDB. Basta creare un gestore di entità, eseguirne il cast in una sessione di ibernazione e interrogare.

final EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("tacs-test", props); 

    final EntityManager entityManager = entityManagerFactory.createEntityManager(); 

    return (Session)entityManager.getDelegate(); 

Miglior Anders

+0

Esattamente ciò di cui avevo bisogno, con – Snicolas

3

Hai detto che il modo più rapido, non sono sicuro se si intende il modo più rapido per andare avanti, o il modo più rapido per eseguire i test in corso, con qualche investimento iniziale per ottenere i test implementati. Questa risposta è più quest'ultima.

Il modo in cui l'ho fatto prima era di implementare alcuni semplici test di integrazione con JUnit e DBUnit.

In pratica, si utilizzerà DBUnit per configurare il database di test con un insieme di dati noto e rappresentativo, quindi semplice JUnit per esercitare i metodi contenenti le query HQL e verificare i risultati.

Per esempio,

impostato il database primo a contenere solo un insieme fisso di dati di esempio,

Product Name, Price 
Acme 100 Series Dynamite, $100 
Acme 200 Series Dynamite, $120 
Acme Rocket, $500 

Questo è qualcosa che faresti in configurazione del caso di test JUnit() metodo.

Ora supponiamo di avere un DAO per questa entità, e c'è un metodo "findProductWithPriceGreaterThan (int)". Nella tua prova, devi fare qualcosa di simile:

public void testFindProductWithPriceGreaterThanInt() { 
    ProductDAO dao = new HibernateProductDAO(); 
    //... initialize Hibernate, or perhaps do this in setup() 

    List products = dao.findProductWithPriceGreaterThan(110); 
    assertEquals(2, products.size()); 
    //... additional assertions to verify the content of the list. 
} 
+0

con rapido/veloce intendevo il 'cambiamento-test-cambio-test' ... iterazione. – Chris

+0

@Chris una volta che si ha una classe base per il test di DBunit, è possibile scrivere metodi di prova in meno di un minuto e vengono eseguiti per secondi. Non veloce come un editor di query dedicato con un grande pulsante "Esegui", ma la cosa buona dei test DBUnit è che puoi salvarli e usarli come test di regressione. Personalmente sto usando Eclipse Hibernate Tools per il primo try'n'error e DBUnit una volta che funziona. –

2

Nel mercato dell'eclissi, è possibile cercare gli strumenti di JBoss e selezionare solo gli strumenti di ibernazione dall'elenco fornito.

6

Ho scritto un semplice strumento per testare l'anteprima di & HQL, questa è solo una classe java con il metodo principale.

è possibile trovare il codice qui: https://github.com/maheskrishnan/HQLRunner

ecco il colpo di schermo ...

enter image description here

1

in Eclipse

  1. Installare strumenti di Hibernate (Jboss)
  2. Interruttore per ibernare perpective
  3. Aprire/click finestra di configurazione di Hibernate
  4. Rt Fare clic sulla finestra e Aggiungi configurazione
  5. Rt Fare clic sulla finestra click/aperta editor di HQL
  6. Tipo ed eseguire le query HQL e ottenere il risultato nella finestra dei risultati Hibernate Query

Segui questo link per ulteriori informazioni http://docs.jboss.org/tools/OLD/2.0.0.GA/hibernatetools/en/html/plugins.html