2014-09-30 6 views
5

Pracuję nad hibernacją 4 wiosny i nowością w ORM. więc znajdując się poniżej wyjątku, proszę o pomoc.org.hibernate.hql.internal.ast.QuerySyntaxException: EdbmsEmployee nie jest odwzorowany [z EdbmsEmployee edbmsEmployee gdzie edbmsEmployee.employeeid =?]

Wiem Pytanie do tego wyjątku jest już zadawane, ale w moim przypadku nadal napotykam problem po wypróbowaniu tych rozwiązań.

Poniżej jest moja klasa Entity

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; 
} 
} 

A oto moja klasa daoimplementaion

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; 
    } 
} 

A kiedy usiłuję dostępu dao jestem coraz niżej Wyjątek -

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 

Próbuję rozwiązać go od 3 dni, ale bez powodzenia,

Importuję prawidłową klasę obiektu javax.persistence.Entity; i używanie nazwy klasy Entity w HQL "od EdbmsEmployee edbmsEmployee gdzie edbmsEmployee.employeeid =?" (Kod działa poprawnie przed tym wierszem podającym wyjątek tylko w tym wierszu)

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 

W mojej klasie Entity użyłem wszystkich adnotacji poprawnie. to dlaczego otrzymuję ten wyjątek "EdbmsEmployee nie jest mapowany".

Mam googleed rozwiązanie i stwierdził, że ten wyjątek jest, jeśli zaimportujemy złe klasy Entity lub jeśli używaliśmy nazwę tabeli w HQL. W obu moich jest poprawna. Wierzę, że podczas pracy z tymi adnotacjami nie trzeba mapować mojej klasy encji w pliku xml.

+1

Fakt, że używasz adnotacji '@ Entity' nie oznacza automatycznie, że jest to encja, jeśli nie powiesz hibernacji na temat tej encji (i sądząc po tym, że nie masz tego stosu), to nie zostanie wykryte i zmapowane. Inna uwaga: dlaczego tworzysz zapytanie o coś, co jest bezpośrednio dostępne w obiekcie 'Session'? 'session.get (EdbmsEmployee.class, employeeId);' zrobi to samo iw bardziej zoptymalizowany sposób. –

+0

Dzięki Deinum Po wypróbowaniu tego również dostaję poniżej wyjątku .. org.hibernate.MappingException: Unknown entity: com.aviva.qc.hrms.entity.EdbmsEmployee –

+1

Oczywiście. Przeczytaj mój pełny komentarz i zobacz, dlaczego ... * "jeśli nie powiesz hibernacji na temat tego bytu (i sądząc po stosie, którego nie masz), to nie zostanie wykryte i zmapowane" * –

Odpowiedz

8

Pamiętaj, aby dodać właściwość "packagesToScan" jawnie dla LocalSessionFactoryBean.

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

Z powyższej deklaracji hibernacji będzie w stanie odwzorować klasę encji z klasy bazy

+0

Dzięki, sumit wygląda na to, że teraz działa dobrze. –

0

To samo stało się mi, że muszę dodać @EntityScan („com.what kiedykolwiek spakować podmioty są w”) na górze klasy aplikacji.