2013-05-01 61 views
2

我试图检索一个对象及其子。该请求出现异常。休眠异常 - 无法解析属性:

模型 - 职员类是一个自我引用类,其中带有checker_id的检查器也是职员。而且工作人员和检查员与模块模型有着一对多的关系。

public class Staff implements Serializable, 
    @Id 
    @Column(name = "staff_id") 
    private String staffId; 

    @ManyToOne(cascade={CascadeType.ALL}) 
    @JoinColumn(name="checker_id") 
    private Staff checker; 

    @OneToMany(mappedBy="checker", orphanRemoval=true, cascade = CascadeType.ALL) 
    private Set<Staff> setters = new HashSet<Staff>(); 

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="setter") 
    private Set<Module> sModule = new HashSet<Module>(); 

    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="checker") 
    private Set<Module> cModule = new HashSet<Module>(); 

//getters and setters} 

模块型号

public class Module implements Serializable{ 

    @ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="staff_id", insertable=false, updatable=false) 
private Staff setter; 

@ManyToOne(fetch=FetchType.LAZY) 
@JoinColumn(name="checker_id", insertable=false, updatable=false) 
private Staff checker; 

//getters and setters } 

DAO代码

@Transactional 
@SuppressWarnings("unchecked") 
public Staff getWithModules(String staffId){ 

    //Retrieve Staff 
    Criteria crit = getCurrentSession().createCriteria(Staff.class); 
    crit.add(Restrictions.eq("staffId", staffId)); 
    Staff staff = get(crit); 

    //Retrieve the modules for the staff 
    crit = getCurrentSession().createCriteria(Module.class); 
    crit.add(Restrictions.eq("Staff.staffId", staffId)); 
    crit.add(Restrictions.isNull("checkerId")); 
    crit.addOrder(Order.asc("moduleId")); 
    Set<Module> sModule = new LinkedHashSet<Module>(crit.list()); 
    staff.setsModule(sModule); 
    //Set<Module> modules = new LinkedHashSet<Module>(crit.list()); 
    //staff.setModules(modules); 
    return staff; 
} 

当我试图让任何员工ID和与它一起连接到它的模块。我在堆栈跟踪中出现这个错误:

org.hibernate.QueryException: could not resolve property: Staff of: com.project.professional.model.Module 
org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:83) 
org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:77) 
org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1945) 
org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:61) 
org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1920) 
org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:523) 
org.hibernate.loader.criteria.CriteriaQueryTranslator.findColumns(CriteriaQueryTranslator.java:538) 
org.hibernate.criterion.SimpleExpression.toSqlString(SimpleExpression.java:66) 
org.hibernate.loader.criteria.CriteriaQueryTranslator.getWhereCondition(CriteriaQueryTranslator.java:419) 
org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:123) 
org.hibernate.loader.criteria.CriteriaJoinWalker.<init>(CriteriaJoinWalker.java:92) 
org.hibernate.loader.criteria.CriteriaLoader.<init>(CriteriaLoader.java:95) 
org.hibernate.internal.SessionImpl.list(SessionImpl.java:1602) 
org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:374) 
com.project.professional.dao.StaffDAO.getWithModules(StaffDAO.java:60) 
com.project.professional.dao.StaffDAO$$FastClassByCGLIB$$d033d033.invoke(<generated>) 
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:698) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:631) 
com.project.professional.dao.StaffDAO$$EnhancerByCGLIB$$58379429.getWithModules(<generated>) 
com.project.professional.service.StaffServiceImpl.getWithModules(StaffServiceImpl.java:54) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:601) 
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) 
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) 
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) 
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) 
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) 
$Proxy46.getWithModules(Unknown Source) 
com.project.professional.controller.StaffController.showStaffModules(StaffController.java:83) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:601) 
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219) 
org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:746) 
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:687) 
org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:915) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:811) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:796) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) 
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:183) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) 
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) 
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) 
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) 
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) 
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 

我很感激你知道这个问题是什么。

+0

是您的hibernate.cfg.xml文件中提到的Staff类? – luksch 2013-05-01 14:16:19

回答

4
crit = getCurrentSession().createCriteria(Module.class); 
crit.add(Restrictions.eq("Staff.staffId", staffId)); 

这意味着,你告诉Hibernate的是,实体Module的财产Staff的财产id应等于staffId。但Module中没有Staff财产,正如异常信息所说的那样。 Module有一个名为setter的属性,另一个名为checker

+0

谢谢。这是问题所在。我把房产改成了二传手。 – user2259555 2013-05-01 14:32:01

0

我有这个类似的错误弹出。无法解析属性:属性名称:BO名称。在我重构相同的属性名称之前,它正确地获得了getters和setter。然而,错误再次发生。所以我删除了getter和setter,并通过“Generate getters and setters”选项重新生成。问题解决了。看起来,hibernate映射无法从重构代码中读取getter。附:想到分享这个,因为它可能对任何有类似错误信息的人有帮助。