2011-09-19 14 views
6

Sto provando a creare un semplice progetto EJB + JPA in Eclipse (Indigo). Ho creato nuovo progetto EJB dove:Problema con il progetto JPA in Eclipse - errore nella classe annotato @Entity: la tabella "xxx" non può essere risolta

  • Obiettivo: esistente Glassfish Server
  • Configurazione: EJB Module + GlassFish descrittore di distribuzione di file + Java + JPA Nella finestra di APP Facet Dichiaro di connessione a Postgres db (ping successo)

Ho un problema quando sto provando a definire l'entità: la tabella "Dipendente" non può essere risolta. Ho aggiunto l'annotazione @Table con il parametro name specificato, ma questo non ha funzionato. mio file persistence.xml:

<persistence-unit name="pu_name"> 
    <jta-data-source>jdbc/baza1Postgres</jta-data-source> 
</persistence-unit> 

In GlassFish ho definito JDBC risorsa con il nome: "JDBC/baza1Postgres"
Come "Eclipse sapere" se la mia tabella esiste? Cos'altro dovrei configurare?

risposta

3

È necessario specificare nel file persistence.xml dove cercare le entità, hanno uno sguardo al Java EE 6 tutorial, ecco un esempio preso da lì:

Persistence Units

A persistence unit defines a set of all entity classes that are managed by EntityManager instances in an application. This set of entity classes represents the data contained within a single data store.

Persistence units are defined by the persistence.xml configuration file. The following is an example persistence.xml file:

<persistence> 
    <persistence-unit name="OrderManagement"> 
     <description>This unit manages orders and customers. 
      It does not rely on any vendor-specific features and can 
      therefore be deployed to any persistence provider. 
     </description> 
     <jta-data-source>jdbc/MyOrderDB</jta-data-source> 
     <jar-file>MyOrderApp.jar</jar-file> 
     <class>com.widgets.Order</class> 
     <class>com.widgets.Customer</class> 
    </persistence-unit> 
</persistence> 

This file defines a persistence unit named OrderManagement, which uses a JTA-aware data source: jdbc/MyOrderDB. The jar-file and class elements specify managed persistence classes: entity classes, embeddable classes, and mapped superclasses. The jar-file element specifies JAR files that are visible to the packaged persistence unit that contain managed persistence classes, whereas the class element explicitly names managed persistence classes.

anche dare un'occhiata a questo stackoverflow question utilizzando ibernare è possibile eseguire la scansione per le classi che hanno l'annotazione Entity

30

trovato questa soluzione a "Tabella xxx non può essere risolto" errore:

In Eclipse, andare a finestra -> Preferenze -> convalida, JPA Validator, disattivare per Build.

A volte si sta sviluppando un app con un nuovo schema di database di andare con lui, ma si ottiene questo:

Schema "null" cannot be resolved for table "XXXX".

Questo probabilmente non dovrebbe essere attivato per impostazione predefinita in ogni caso; molto probabilmente le persone costruiranno nuove app da zero di quelle nuove per adattarsi ai vecchi database, e anche se costruiscono da vecchi, gli strumenti JPA di Eclipse hanno una funzione di compilazione di entità da tabelle. "

+0

fonte: http://adterrasperaspera.com/blog/2009/08/11/eclipselink-jpa-in-eclipse-dumb-error-message/ –

4

In Eclipse per renderlo felice ho dovuto creare la tabella tramite JPA Strumenti.

Right Click progetto> Strumenti JPA> Genera tabelle da Enti

Credo che si potrebbe disattivare la convalida troppo, ma la creazione della tabella sembra avere più senso.

3

Sto usando Eclipse. Ho notato che eclipse riconosce le tabelle quando sto usando "Data Source Explorer "finestra in JPA eviroment (probabilmente non necessario compilare ma utile per controllare il database nello stesso IDE eclissi).Poi, quando ho creato una connessione al database in quella finestra ho ottenuto i dati di modifica problema in proprietà di connessione:

non funziona (tabella non può essere risolto):

Database: my_database 
URL: jdbc:mysql://localhost:3306 
User Name: jpa_user 
Password: jpa_pass 

fissa (aggiungo database nel campo URL):

Database: my_database 
URL: jdbc:mysql://localhost:3306/my_database 
User Name: jpa_user 
Password: jpa_pass 

Ricordate di usare @Table (name = "") nelle entità se le tabelle non sono con lettere maiuscole nel database.

+0

E 'stato un un po 'di confusione quando aggiungi una nuova connessione al database, la procedura guidata richiede il nome db ma devi anche aggiungerlo all'url come hai detto sopra! quando ho aggiunto il nome del database nell'URL, tutto ha funzionato come previsto! –

0

Un'altra opzione che utilizza la risposta di maxmcbyte è di impostarla solo per progetti specifici. Fare clic con il tasto destro del mouse sul progetto e selezionare Convalida. Abilita le impostazioni specifiche del progetto e disabilita JPA Validator for Build.

1

Ho avuto questo errore ed è stato in grado di farlo funzionare con uno sforzo molto tortuoso. Sto usando PostgreSQL.

Prima di tutto, ho fatto come suggerito sopra e disattivato la convalida per la compilazione. Poi ho eseguito la convalida manualmente ottenendo le cose connesse. I miei passaggi erano essenzialmente questo:

1: Connettersi tramite Data Source Explorer al mio database. Assicurati che la connessione sia nello stato corretto andando a TABLES e clicchi su refresh. Colpire l'aggiornamento sulla connessione non ha aggiornato le tabelle.

2: Probabilmente facoltativo, ma ho utilizzato strumenti JPA per esportare lo schema nel database. Di nuovo, premo Aggiorna come al punto 1.

3: Annota l'entità con Entità e Tabella. Aggiungi il nome nell'entità e NOME, CATALOGO e SCHEMA nell'annotazione Tabella.

@Entity(name="DBAssembly") 
@Table(name="DBAssembly",catalog="lag",schema="public") 

4: eseguire la convalida manualmente. L'aggiunta del catalogo era importante. È molto schizzinoso.

+0

Aggiunta del catalogo + schema + disconnect/connect/refresh la connessione DataSourceExplorer al database ha funzionato per me. Grazie Karl. – Deian

0

il lavoro della ma, oltre a maxmcbyte (Grazie !!) risposta, alcune volte è meglio applicare questa soluzione solo per alcuni progetti, farlo singolarmente accedendo: proprietà del progetto> di convalida> Attiva su"Abilitato impostazioni specifiche del progetto" e di turno disattivato Convalida JPA nella colonna . Vedere l'immagine ...

Config

Problemi correlati