2016-07-12 8 views
0

Ich arbeite an dieser Anwendung, wo ich eine Ergebnisliste von MySql-Datenbank erhalten muss, aber jedes Mal, wenn ich es auf dem Server (Wildfly 9) ausführe, bekomme ich einen Fehler, dass die Tabelle dosen't exist.Here ist der Code in meinem EJB:EJB und Hibernate: Tabelle existiert nicht

@Stateless 
@LocalBean 
public class MessageService { 

    @PersistenceContext(unitName="primary") 
    EntityManager em; 

    @SuppressWarnings("unused") 
    public List<Message> customers = new ArrayList<Message>(); 

    public List<Message> findAll() { 
     customers= em.createQuery("select c from Message c").getResultList(); 
     //customers = query.getResultList(); 
     System.out.println(customers.size()); 
     return customers; 
    } 

und das ist mein Entity:

@Entity 
@NamedQuery(name="Message.findAll", query="SELECT m FROM Message m") 
public class Message implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    private int idMessage; 

    private String discriminateur; 

    private int numFenetre; 

    private String texte; 

und das ist mein persistence.xml:

<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="primary"> 
     <!-- If you are running in a production environment, add a managed 
     data source, this example data source is just for development and testing! --> 
     <!-- The datasource is deployed as <EAR>/META-INF/MavenEar-ds.xml, you 
     can find it in the source at ear/src/main/application/META-INF/MavenEar-ds.xml --> 
     <jta-data-source>java:/mysql</jta-data-source> 
     <class>com.model.entities.Message</class> 
     <properties> 
     <!-- Properties for Hibernate --> 
     <!-- <property name="hibernate.hbm2ddl.auto" value="create-drop" />--> 
     <property name="hibernate.show_sql" value="false" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

PS: Ich habe eine Datenquelle auf wild gesetzt, die auf die Datenbank verweist.

Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet 
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123) 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:126) 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:112) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:91) 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:2066) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1863) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1839) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:910) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:355) 
    at org.hibernate.loader.Loader.doList(Loader.java:2554) 
    at org.hibernate.loader.Loader.doList(Loader.java:2540) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2370) 
    at org.hibernate.loader.Loader.list(Loader.java:2365) 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:497) 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:387) 
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:236) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1300) 
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:103) 
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:573) 
    at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:449) 
    ... 126 more 
Caused by: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'christina.message' doesn't exist 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2985) 
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1631) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723) 
    at com.mysql.jdbc.Connection.execSQL(Connection.java:3283) 
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332) 
    at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1467) 
    at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:504) 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:82) 
    ... 142 more 
+0

können Sie den Fehler anzeigen? Bist du sicher, dass die Tabelle nicht existiert? Sind Sie sicher, dass es sich mit der richtigen Datenbank verbindet? – teacurran

+0

Ich bin mir sicher, dass die Tabelle existiert und das ist die URL in meiner Datenquelle '\t jdbc: mysql: // localhost: 3306/christina' es zeigt deutlich auf die richtige Datenbank. Ich werde den Stack-Trace hinzufügen – MeknessiHamida

+0

@Tiny danke bereits das Problem gelöst.Überprüfen Sie meine Kommentare unter der Antwort – MeknessiHamida

Antwort

1

Versuchen Hinzufügen Sie folgendes zu Ihrem persistence.xml

<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 

ich denke, es könnte für christina.christina.message suchen. sonst würde der Fehler nur sagen Tabelle "Nachricht" nicht gefunden. Wie ist deine Entität annotiert? Verwenden Sie eine benutzerdefinierte Benennungsstrategie oder einen benutzerdefinierten Dialekt?

+0

Ich habe die Eigenschaft hinzugefügt, aber immer noch den gleichen Fehler. Meine Entity ist mit der normalen '@ Entity' darüber gekennzeichnet, das ist es – MeknessiHamida

+0

Ich weiß es nicht. Ich vermute immer noch, dass es versucht, auf das falsche Schema oder etwas zuzugreifen. Normalerweise schalte ich das MySQL-Abfrageprotokoll ein, damit ich alle Abfragen sehen kann, die darauf treffen. Das sollte Ihnen genau sagen, ob es tatsächlich das richtige Schema trifft oder nicht. – teacurran

+0

Oh mein Schlechter, stellt sich heraus, dass der 'create-drop' den Tisch fallen ließ, bevor ich ihn kommentierte, also war ich dummerweise wirklich auf der Suche nach einem Tisch, der nicht existiert. Ich habe es jetzt behoben. – MeknessiHamida