2014-09-30 16 views
5

Tôi đang làm việc trên spring 3 hibernate 4 và new to ORM. do đó, nhận được dưới đây Ngoại lệ xin vui lòng giúp đỡ.org.hibernate.hql.internal.ast.QuerySyntaxException: EdbmsEmployee không được ánh xạ [từ EdbmsEmployee edbmsEmployee nơi edbmsEmployee.employeeid =?]

Tôi biết Câu hỏi về ngoại lệ này đã được yêu cầu nhưng trong trường hợp của tôi, tôi vẫn đang gặp phải sự cố sau khi thử các giải pháp đó.

Dưới đây là lớp Entity tôi

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

Và đây là lớp daoimplementaion tôi

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

Và khi tôi đang cố gắng truy cập dao tôi đang nhận được dưới đây Exception -

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 

Tôi đang cố gắng giải quyết nó sau 3 ngày nhưng không may mắn,

Tôi đang nhập đúng lớp Entity javax.persistence.Entity; và sử dụng tên lớp thực thể trong HQL "từ EdbmsEmployee edbmsEmployee nơi edbmsEmployee.employeeid =?" (Mã đang chạy tốt trước khi dòng này chỉ đưa ra ngoại lệ trên dòng này)

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 

và trong lớp Thực thể tôi đã sử dụng tất cả chú thích một cách chính xác. thì tại sao tôi nhận được ngoại lệ này "EdbmsEmployee không được ánh xạ".

Tôi đã googled giải pháp và thấy rằng ngoại lệ này xảy ra nếu chúng tôi nhập sai lớp Thực thể hoặc nếu chúng tôi đã sử dụng tên bảng trong HQL. Trong cả hai của tôi là chính xác. Và tôi tin rằng khi làm việc với các chú giải này, không cần phải ánh xạ lớp thực thể của tôi trong tệp xml.

+1

Thực tế là bạn sử dụng chú thích '@ Entity' không tự động có nghĩa là thực thể, nếu bạn không nói hibernate về thực thể này (và đánh giá từ stacktrace bạn chưa có), nó sẽ không được phát hiện và lập bản đồ. Trên một lưu ý khác tại sao bạn tạo một truy vấn cho một cái gì đó có sẵn trực tiếp trên đối tượng 'Session'? 'session.get (EdbmsEmployee.class, employeeId);' sẽ làm tương tự và theo cách tối ưu hơn. –

+0

Cảm ơn Deinum Sau khi thử điều này tôi cũng nhận được dưới đây Ngoại lệ .. org.hibernate.MappingException: Không rõ thực thể: com.aviva.qc.hrms.entity.EdbmsEmployee –

+1

Rõ ràng là vậy. Đọc bình luận đầy đủ của tôi và yo sẽ thấy lý do tại sao ... * "nếu bạn không nói hibernate về thực thể này (và đánh giá từ stacktrace bạn đã không) nó sẽ không được phát hiện và ánh xạ" * –

Trả lời

8

Hãy đảm bảo thêm thuộc tính "packagesToScan" một cách rõ ràng cho LocalSessionFactoryBean.

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

Với Hibernate khai trên sẽ có thể để lập bản đồ lớp thực thể của bạn với lớp cơ sở dữ liệu

+0

Cảm ơn, sumit có vẻ như đang hoạt động tốt. –

0

Cùng một điều đã xảy ra với tôi tôi đã phải thêm @EntityScan ("com.what từng gói thực thể của bạn đang ở trong") trên đầu trang của Lớp Ứng dụng.

Các vấn đề liên quan