2016-04-05 13 views
0

Ich habe eine POJO-Klasse mit Zuordnung von Objekten wie folgt.Null-Zeiger-Ausnahme criterion.list()

Wenn ich meine Hauptklasse ausführen, erhalten Nullzeiger Ausnahme.

Jemand bitte helfen Sie mir zu verstehen, was hier schief gelaufen ist.

Erste Pojo Klasse

@Entity 
@Table(name = "club") 

public class Club implements Serializable{ 
    @Id 
    @GeneratedValue 
    @Column(name = "clubId") 
    private Integer clubId; 

    @Column(name="name") 
    private String name; 

    @OneToMany(fetch = FetchType.LAZY,mappedBy = "club") 
     private Set<Team> team=new HashSet<Team>(0); 

Zweite Pojo Klasse

@Entity 
@Table(name="team") 
public class Team implements Serializable{ 

    @Id 
    @GeneratedValue 
    @Column(name="teamid") 
    private Integer teamId; 

    @Column(name="teamname") 
    private String teamName; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(name = "clubid", nullable = false, insertable = false, updatable = false) 
    private Club club; 

Hauptklasse:

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.SQLException; 
import java.util.List; 
import java.util.Set; 

import org.hibernate.Criteria; 
import org.hibernate.FetchMode; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.hibernate.Transaction; 
import org.hibernate.criterion.Projection; 
import org.hibernate.criterion.Projections; 

public class CriteriaExecution { 

    public static void main(String[] args) { 

     Session session=HibernateUtil.getSessionFactory().openSession(); 
     //Transaction tx = session.beginTransaction(); 
     Criteria criteria = session.createCriteria(Club.class); 
     criteria.setFetchMode("Team", FetchMode.JOIN); 
      List list=criteria.list(); 
      for(int i=0;i<list.size();i++) 
     { 
      System.out.println("Values"+list.get(i)); 
     } 
     // tx.commit(); 
     session.close(); 

    } 

} 

Stacktrace der Eclipse-Konsole:

Exception in thread "main" java.lang.NullPointerException 
    at com.mysql.jdbc.PreparedStatement.asSql(PreparedStatement.java:649) 
    at com.mysql.jdbc.PreparedStatement.asSql(PreparedStatement.java:587) 
    at com.mysql.jdbc.PreparedStatement.toString(PreparedStatement.java:4068) 
    at java.lang.String.valueOf(Unknown Source) 
    at java.lang.StringBuffer.append(Unknown Source) 
    at com.mysql.jdbc.trace.Tracer.printParameters(Tracer.aj:240) 
    at com.mysql.jdbc.trace.Tracer.printEntering(Tracer.aj:167) 
    at com.mysql.jdbc.trace.Tracer.entry(Tracer.aj:126) 
    at com.mysql.jdbc.trace.Tracer.ajc$before$com_mysql_jdbc_trace_Tracer$1$f51c62b8(Tracer.aj:45) 
    at com.mysql.jdbc.Connection.registerStatement(Connection.java) 
    at com.mysql.jdbc.Statement.<init>(Statement.java:270) 
    at com.mysql.jdbc.PreparedStatement.<init>(PreparedStatement.java:500) 
    at com.mysql.jdbc.Connection.clientPrepareStatement(Connection.java:2187) 
    at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4829) 
    at com.mysql.jdbc.Connection.prepareStatement(Connection.java:4734) 
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:161) 
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:182) 
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:159) 
    at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1859) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1836) 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1816) 
    at org.hibernate.loader.Loader.doQuery(Loader.java:900) 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342) 
    at org.hibernate.loader.Loader.doList(Loader.java:2526) 
    at org.hibernate.loader.Loader.doList(Loader.java:2512) 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2342) 
    at org.hibernate.loader.Loader.list(Loader.java:2337) 
    at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:124) 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1662) 
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:374) 
    at com.user.CriteriaExecution.main(CriteriaExecution.java:47) 
+0

ich hinzugefügt habe diese viele unter Jar aufgeführt, ist, dass alles, was ich brauche hibernate hinzufügen commons-Annotationen, hibernate-core-4.2.3.Final, javaassist-3.1.4.0-ga-1.0.0-Quellen, javax.persistence, jboss-logging-3.1.0.GA, jta-1_1 , mysql-connector-java – Thiru

+0

Fügen Sie bitte eine Liste von Bibliotheken zur Frage hinzu. Und bieten Versionen ('Commons-Annotations' und andere). Und füge 'HibernateUtil' hinzu. –

+0

Funktioniert die einfache Kriterienabfrage ohne die fetch-Anweisung? – carbontax

Antwort

1

Sie sollten das Feld nicht den Typen, in der nach den Kriterien: in lib, antlr, dom4j,

criteria.setFetchMode("team", FetchMode.JOIN); 
+0

Immer noch bekomme ich NPE auch nach dem Wechsel von Team zu Feld als Team – Thiru

+0

Wenn Sie die Sammlung EAGER (@OneToMany (fetch = FetchType.EAGER, mappedBy = "Club") deklarieren und entfernen Sie den setFetchMode aus den Kriterien die Liste korrekt zurück? –

+0

Nach dem Ändern EAGER immer noch die gleiche NPE Ich denke, es ist etwas mit Jar zu Konnektivität zu mySQL – Thiru