2014-09-30 7 views
5

Ich arbeite an Frühling 3 Winterschlaf 4 und neu zu ORM. also bitte unter Exception helfen.org.hibernate.hql.internal.ast.QuerySyntaxException: EdbmsEmployee ist nicht zugeordnet [aus EdbmsEmployee edbmsEmployee, wo edbmsEmployee.employeeid =?]

Ich weiß Frage für diese Ausnahme ist bereits gefragt, aber in meinem Fall bin ich immer noch das Problem nach dem Ausprobieren dieser Lösung.

Unten ist mein Entity Klasse

package com.aviva.qc.hrms.entity; 

import java.io.Serializable; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="EDBMS_EMPLOYEE") 
public class EdbmsEmployee implements Serializable{ 

@Id 
@Column(name="EMPLOYEEID", nullable=false) 
private String employeeid; 

@Column(name="FIRSTNAME", nullable=false) 
private String firstname; 

@Column(name="LASTNAME", nullable=false) 
private String lastname; 

@Column(name="BANDID", nullable=false) 
private String bandid; 

@Column(name="DOJ", nullable=false) 
private String doj; 

@Column(name="DOB", nullable=false) 
private String dob; 

@Column(name="FUNCTIONNAME", nullable=false) 
private String functionname; 

public String getEmployeeid() { 
    return employeeid; 
} 

public void setEmployeeid(String employeeid) { 
    this.employeeid = employeeid; 
} 

public String getFirstname() { 
    return firstname; 
} 

public void setFirstname(String firstname) { 
    this.firstname = firstname; 
} 

public String getLastname() { 
    return lastname; 
} 

public void setLastname(String lastname) { 
    this.lastname = lastname; 
} 

public String getBandid() { 
    return bandid; 
} 

public void setBandid(String bandid) { 
    this.bandid = bandid; 
} 

public String getDoj() { 
    return doj; 
} 

public void setDoj(String doj) { 
    this.doj = doj; 
} 

public String getDob() { 
    return dob; 
} 

public void setDob(String dob) { 
    this.dob = dob; 
} 

public String getFunctionname() { 
    return functionname; 
} 

public void setFunctionname(String functionname) { 
    this.functionname = functionname; 
} 
} 

Und hier ist meine daoimplementaion Klasse

package com.aviva.qc.hrms.daoimpl; 

    import org.hibernate.Session; 
    import org.hibernate.SessionFactory; 
    import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Repository; 
import org.springframework.transaction.annotation.Transactional; 

import com.aviva.qc.hrms.dao.EdbmsEmployeeDao; 
import com.aviva.qc.hrms.entity.EdbmsEmployee; 

@Repository("edbmsEmployeeDao") 
public class EdbmsEmployeeDaoImpl implements EdbmsEmployeeDao{ 

private static Logger logger = LoggerFactory.getLogger(EdbmsEmployeeDaoImpl.class); 

@Autowired 
private SessionFactory sessionFactory; 

@Transactional(readOnly=true) 
public EdbmsEmployee getEdbmsEmployeeDetails(String employeeid){ 
    Session session = sessionFactory.getCurrentSession();  
    System.out.println("session session "+session); 

    EdbmsEmployee edbmsEmployee = (EdbmsEmployee)session.createQuery("from EdbmsEmployee edbmsEmployee where edbmsEmployee.employeeid=?") 
      .setParameter("employeeid",employeeid) 
      .uniqueResult(); 

    if(logger.isDebugEnabled()){ 

     if(edbmsEmployee==null){ 
      System.out.println("Employee not Found "+edbmsEmployee); 
      logger.trace("Employee not Found "+edbmsEmployee); 
     }else{ 
      System.out.println("Employee Found "+edbmsEmployee); 
      logger.trace("Employee Found "+edbmsEmployee); 
     } 
    } 

    return edbmsEmployee; 
    } 
} 

Und wenn ich den Zugriff auf dao versuche ich bin immer unter Ausnahme -

org.hibernate.hql.internal.ast.QuerySyntaxException: EdbmsEmployee is not mapped [from EdbmsEmployee edbmsEmployee where edbmsEmployee.employeeid=?] 
at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180) 
at org.hibernate.hql.internal.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:110) 
at org.hibernate.hql.internal.ast.tree.FromClause.addFromElement(FromClause.java:93) 
at org.hibernate.hql.internal.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:326) 
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3252) 
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3141) 
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:694) 
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:550) 
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:287) 
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:235) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:248) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:183) 
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:101) 
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:119) 
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:215) 
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:193) 
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1649) 
at com.aviva.qc.hrms.daoimpl.EdbmsEmployeeDaoImpl.getEdbmsEmployeeDetails(EdbmsEmployeeDaoImpl.java:29) 
at com.aviva.qc.hrms.daoimpl.EdbmsEmployeeDaoImpl$$FastClassByCGLIB$$52572915.invoke(<generated>) 
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:163) 
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodI 

Ich versuche es seit 3 ​​Tagen zu lösen, aber kein Glück,

Ich importiere richtige Entity-Klasse javax.persistence.Entity; und den Namen der Entity-Klasse in HQL verwenden "von EdbmsEmployee edbmsEmployee wo edbmsEmployee.employeeid =?" (-Code läuft gut, bevor diese Zeile auf dieser Linie einzigen Ausnahme geben)

session session SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=   []];ActionQueue[insertions=[] updates=[] deletions=[] collectionCreations=[] collectionRemovals=[] collectionUpdates=[] unresolvedInsertDependencies=UnresolvedEntityInsertActions[]]) 
Sep 30, 2014 11:17:49 AM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet spring threw exception 

und in meiner Entity-Klasse habe ich alle Annotation richtig eingesetzt. dann warum bekomme ich diese Ausnahme "EdbmsEmployee ist nicht zugeordnet".

Ich habe die Lösung gegoogelt und festgestellt, dass diese Ausnahme kommt, wenn wir falsche Entity-Klasse importieren oder wenn wir den Tabellennamen in HQL verwendet haben. In meinen beiden ist richtig. Und ich glaube, während der Arbeit mit diesen Annotation muss meine Entity-Klasse in XML-Datei nicht zugeordnet werden.

+1

Die Tatsache, dass Sie die '@ Entity'-Annotationen verwenden, bedeutet nicht automatisch, dass es sich um eine Entität handelt. Wenn Sie den Hibernate nicht über diese Entity mitteilen (und aus dem stacktrace nicht ableiten), wird sie nicht erkannt und kartiert. Warum erstellen Sie eine Abfrage für etwas, das direkt auf dem Objekt 'Session' verfügbar ist? 'session.get (EdbmsEmployee.class, employeeId);' wird das selbe und in einer optimierten Weise tun. –

+0

Danke Deinum Nachdem ich dies auch versucht habe, bekomme ich unter Ausnahme .. org.hibernate.MappingException: Unbekannte Einheit: com.aviva.qc.hrms.entity.EdbmsEmployee –

+1

Nun offensichtlich. Lies meinen kompletten Kommentar und du wirst sehen wieso ... * "wenn du nicht über diese Einheit Hibernate erzählst (und aus dem stacktrace urteilst, dass du nicht hast), wird sie nicht erkannt und zugeordnet" * –

Antwort

8

Stellen Sie sicher, dass Sie die Eigenschaft "packagesToScan" explizit für LocalSessionFactoryBean hinzufügen.

<property name="packagesToScan" value="com.hibernate.yourpackage" /> 

Mit oben Erklärung Hibernate Ihre Entity-Klasse mit Datenbank-Klasse zuzuordnen

+0

Danke, so scheint es jetzt gut zu funktionieren. –

0

Das Gleiche gilt für mich hatte der Lage wäre, habe ich zufällig @EntityScan hinzufügen musste („com.what jemals Ihre Einheiten sind im Paket“) oben auf der Anwendungsklasse.