2014-09-30 25 views
5

İlkbahar 3 hazırda bekletme 4 ve yeni ORM için çalışıyorum. İstisna altında almak lütfen yardım edin.org.hibernate.hql.internal.ast.QuerySyntaxException: EdbmsEmployee eşlenmiyor [edbmsEmployee edbmsEmployee öğesinden edbmsEmployee.employeeid =?]

Bu istisnanın sorusu zaten sorulmuştu, ancak durumumda bu çözümü denedikten sonra hala sorunla karşı karşıya kalıyorum.

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 

- ı erişim dao i İstisna altına alıyorum çalışıyorum zaman Aşağıda

benim varlık sınıfı

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

Ve burada benim daoimplementaion sınıfı

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

Ve 3 günden beri çözmeye çalışıyorum ama şans yok,

Doğru Entity sınıfını javax.persistence.Entity; ve HQL'de Varlık sınıfı adını kullanma "edbmsEmployee edbmsEmployee from edbmsEmployee.employeeid =?"

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 

(bu hat sadece bu hat üzerindeki istisna vermeden önce Kod ince çalışıyorsa) ve benim varlık sınıfında ı doğru tüm ek açıklama kullandık. neden bu özel durum "EdbmsEmployee eşlenmiyor" alıyorum.

Çözümü araştırdım ve yanlış Entity sınıfını içe aktarırsak veya HQL'de tablo adı kullanırsak bu istisnanın geldiğini tespit ettim. İkisinde de doğru. Ve bu açıklamalarla çalışırken, varlık sınıfımı xml dosyasında eşlemeye gerek yok.

+1

'@ Entity 'ek açıklamalarını kullandığınız gerçeği, bu varlık hakkında hazırda beklemediğinizi (ve siz yapmadığınız stacktrace'den yola çıkarak) söylemezseniz otomatik olarak bir varlık anlamına gelir. ve haritalanmış. Başka bir notta, 'Session' nesnesinde doğrudan kullanılabilen bir şey için neden bir sorgu oluşturuyorsunuz? session.get (EdbmsEmployee.class, employeeId); 'Aynı şeyi ve daha optimize bir şekilde yapacaktır. –

+0

Teşekkürler Deinum Bunu denedikten sonra ben de istisna aşağıda alıyorum .. org.hibernate.MappingException: Bilinmeyen varlık: com.aviva.qc.hrms.entity.EdbmsEmployee –

+1

Açıkçası. Tam yorumumu oku ve nedenini göreceksiniz ... * "eğer bu varlık hakkında hazırda beklemediyseniz (ve yokken stacktrace'den yargılanmıyorsanız) tespit edilmeyecek ve haritalanmayacak" * –

cevap

8

Lütfen LocalSessionFactoryBean için "packagesToScan" özelliğini açıkça eklediğinizden emin olun. Yukarıdaki beyan hazırda ile

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

veritabanı sınıfı ile, tüzel sınıfını eşlemek mümkün olacaktır

+0

Teşekkürler, sumit şu an iyi çalışıyor gibi görünüyor. –

0

Aynı şey i @EntityScan eklemek zorunda başıma gelmediği ("com.what hiç varlıkları olan paket") Uygulama Sınıfının üstünde.