Hibernate异常 - 无法解析属性:

3
我正在尝试检索一个对象及其子对象。请求出现异常。
模型 - staff类是一个自引用类,其中具有checker_id的checker也是staff。同时,staff和checker与module模型都有一对多的关系。
   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)

我希望知道问题所在。

你的 hibernate.cfg.xml 文件中是否提到了 Staff 类? - luksch
2个回答

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

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

谢谢。那就是问题所在。我把属性改成了setter。 - user2259555

0

我曾经遇到过类似的错误。无法解析属性:BO名称的属性名称。在正确重构了相同的属性名称及其getter和setter之前,该错误已经出现过。然而,错误再次发生。所以我删除了getter和setter,并通过“生成getter和setter”选项重新生成了它。问题得到了解决。似乎hibernate映射无法从重构后的代码中读取getter。顺便说一下,这可能对任何遇到类似错误消息的人有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接