Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    64

    java - hibernate problemi con hql

    Buonasera, spero di aver inserito la discussione nel posto giusto. Dato che la mia domanda è su hql.
    Ho da poco iniziato a studiare hibernate e ora mi sono scontrata con l'hql che mi sta dando parecchi problemi. Ora sto tentando si eseguire una select e delle join.
    Le tabelle coinvolte nella query sono 3. La tabella libro, autore e libro_autore.
    autore[id_autore,nome,cognome]
    libro[id_libro,titolo,isbn]
    libro_autore[id_autore,id_libro]
    mapping del libro
    codice:
    <hibernate-mapping schema="libreria" package="stefania.dto">
    	<class name="Libro" table="libro" lazy="false">
    		<id name="id" column="id_libro">
    			<generator class="native"/>
    		</id>
    		<property name="titolo"/>
    		<property name="isbn"/>	 
    		<set name="autore" table="autore_libro" lazy="false">
    			<key column="id_libro" />
    			<many-to-many column="id_autore" class="Autore" />
    		</set>
    		<set name="genere" table="genere_libro" lazy="false">
    			<key column="id_libro" />
    			<many-to-many column="id_genere" class="Genere" />
    		</set>
    		<set name="posizione" table="posizione_libro" lazy="false">
    			<key column="id_libro" />
    			<many-to-many column="id_posizione" class="Posizione" />
    		</set>
    	</class>
    </hibernate-mapping>
    mapping dell'autore
    codice:
    <hibernate-mapping schema="libreria" package="stefania.dto">
    	<class name="Autore" table="autore" lazy="false">
    		<id name="id" column="id_autore">
    			<generator class="native"/>
    		</id>
    		<property name="nome"/>
    		<property name="cognome"/>
    	</class>
    </hibernate-mapping>
    poi ci sono i bean di cui posto soltanto i membri
    bean libro
    codice:
    private int m_id;
    	private String m_titolo;
    	private String m_isbn;
    	private Set m_autore = new HashSet();
    	private Set m_genere = new HashSet();
    	private Set m_posizione = new HashSet();
    bean autore
    codice:
    private int m_id;
    	private String m_nome;
    	private String m_cognome;
    	private Set m_libro = new HashSet();
    ora devo eseguire una query che dato il nome dell'autore mi venga restituita una lsta di libri che abbiano quell'autore.Quindi devo fare una join, ma mentre con lsql riuscirei a farlo con l'hql è un problema, perchè la quey dovebbe restituirmi 3 libri invece me ne restituisce 9.
    query eseguita
    codice:
     m_session= getSessionFactory().openSession();
    
    		Query query = m_session.createQuery("from Libro l, Autore a where a.nome = :nome");
    		query.setString("nome", p_nomeAutore);
    		List<Libro> listaLibri = query.list();
    		getSessionFactory().close();
    		return listaLibri;
    Non riesco a capire cosa fare.
    Grazie ciao Stefania

  2. #2
    prova "from Libro l join Autore a where a.nome = :nome"

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    64
    Grazie, purtroppo non funziona,
    mi da questo errore
    codice:
    org.hibernate.hql.ast.QuerySyntaxException: Path expected for join! [from stefania.dto.Libro l join Autore a where a.nome = :nome]
    	at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
    	at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:47)
    	at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:82)
    	at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:261)
    	at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185)
    	at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136)
    	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101)
    	at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80)
    	at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:94)
    	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156)
    	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135)
    	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1651)
    	at stefania.dao.LibroDaoImpl.LibriByAutore(LibroDaoImpl.java:56)
    	at stefania.dao.LibroDaoImplTest.testLibriByAutore(LibroDaoImplTest.java:77)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	at java.lang.reflect.Method.invoke(Method.java:597)
    	at junit.framework.TestCase.runTest(TestCase.java:168)
    	at junit.framework.TestCase.runBare(TestCase.java:134)
    	at junit.framework.TestResult$1.protect(TestResult.java:110)
    	at junit.framework.TestResult.runProtected(TestResult.java:128)
    	at junit.framework.TestResult.run(TestResult.java:113)
    	at junit.framework.TestCase.run(TestCase.java:124)
    	at junit.framework.TestSuite.runTest(TestSuite.java:232)
    	at junit.framework.TestSuite.run(TestSuite.java:227)
    	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:79)
    	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46)
    	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
    	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    64
    soluzione
    codice:
    String queryString = "select l from Libro l left join l.autore a where a.nome = :nome order by a.nome";
    		Query query = m_session.createQuery(queryString);

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.