2011-11-08 2 views
5

Sto utilizzando JPA 2 in un progetto JSF 2, quindi configuro la mia origine dati in GlassFish v3, è tutto a posto, ma se provo a testare le query JPA negli Strumenti di sospensione, esso fornisce me l'errore seguente:JPA: Impossibile trovare TransactionManager

Sessionfactory error:Could not locate TransactionManager 

Ecco il mio persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="SuaParte" transaction-type="JTA"> 
     <jta-data-source>jdbc/suaparte_ds</jta-data-source> 
     <class>entity.Area</class> 
     <properties> 
      <property name="eclipselink.logging.level" value="FINE"/> 
      <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/> 
     </properties> 


    </persistence-unit> 
</persistence> 

sto usando EclipseLink 2.3 (Indigo) e JPA 2 nel mio progetto Eclipse JSF 2.

EDIT seguire l'approccio @fonini, i miei hibernate.properties:

hibernate.connection.username=<filled> 
hibernate.connection.password=<filled> 
hibernate.connection.driver_class=com.mysql.jdbc.Driver 
hibernate.dialect=org.hibernate.dialect.MySQLDialect 
hibernate.connection.url=<filled> 
hibernate.connection.provider_class=org.hibernate.connection.DriverManagerConnectionProvider 
hibernate.datasource=jdbc/suaparte_ds 
hibernate.transaction.manager_lookup_class=org.hibernate.transaction.JBossTransactionManagerLookup 

Ma ora mi dà un altro errore: error

ho dovuto cambiare il id generator nei miei entità?

@Entity 
    @Table(name="product") 
    public class Product implements Serializable { 
     private static final long serialVersionUID = 1L; 

     @Id 
     @GeneratedValue(strategy=GenerationType.SEQUENCE) 
     private Integer id; 

     @Size(max=150, message="150 caracteres no máximo") 
     private String description; 

     // getters and setter 
} 
+0

Se si distribuisce il progetto a un server Glassfish, funziona? – fonini

+0

fa @fonini, voglio solo testare le query JPQL e ho scoperto che Hibernate Tools è capace di questo. –

+0

MySQL non ha sequenze, funziona con incremento automatico. È necessario modificare GenerationType.SEQUENCE in GenerationType.IDENTITY – fonini

risposta

0

Poiché Hibernate Tools gira all'interno di Eclipse, non ha accesso alle origini dati specifiche del server applicazioni.

È possibile utilizzare un file di proprietà per impostare la connessione che sovrascriverà l'origine dati.

Ecco un esempio di file:

hibernate.connection.username=user 
hibernate.connection.password=pass 
hibernate.connection.driver_class=org.PostgreSQL.Driver 
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect 
hibernate.connection.url=jdbc:postgresql... 

hibernate.connection.provider_class=org.hibernate.connection.DriverManagerConnectionProvider 
hibernate.datasource= 
hibernate.transaction.manager_lookup_class= 
+0

Come sarebbe rimanere se fosse in MySQL? Sto usando MySQL, scusa non ho menzionato prima =) –

+0

Posso impostare il mio hibernate.properties, aggiorno il mio post. –

+1

Dialetto: org.hibernate.dialect.MySQLDialect. Se si utilizza InnoDB (org.hibernate.dialect.MySQLInnoDBDialect), se si utilizza MyISAM (org.hibernate.dialect.MySQLMyISAMDialect). Classe del driver: com.mysql.jdbc.Driver. URL: jdbc: mysql: // localhost/your_db. Spero che questo ti aiuti! – fonini