public class Department{
   private int id;
   private String name;
   ...get set方法
}
public class Employee{
   private int id;
   private String name;
   private Department department;
   ...get set方法
}
<many-to-one name="department" class="com.tyut.domain.Department" column="depart_id"></many-to-one>depart_id是外键
现在需要实现一个查询:已知department的一个departmentId,查询Employee外键为departmentId的List集合Query query = session.createQuery("from Candiate where depart_id=:departmentId");
query.setString("departmentId",departmentId);这样不对,应该怎么写啊

解决方案 »

  1.   


    from Candiate 这是哪个表?
    Query query = session.createQuery("from Department d where d.id=:departmentId");
    query.list();
      

  2.   

    是不是你的 语句写的有问题?"from Candiate where depart_id=:departmentId",,你再仔细看看,逻辑是没有问题的!
      

  3.   


    写错了,Query query = session.createQuery("from Employee e where e.department.id=:departmentId");
    这样也是错
      

  4.   

    把错误贴出来吧你两个类的id都是int的,为什么要 query.setString("departmentId",departmentId);
      

  5.   

    错误:Hibernate: select votesubjec0_.subject_id as subject1_2_, votesubjec0_.subject_name as subject2_2_, votesubjec0_.subject_state as subject3_2_, votesubjec0_.subject_message as subject4_2_, votesubjec0_.start_time as start5_2_, votesubjec0_.end_time as end6_2_, votesubjec0_.subject_number as subject7_2_, votesubjec0_.subject_status as subject8_2_, votesubjec0_.vote_status as vote9_2_, votesubjec0_.subject_banner as subject10_2_, votesubjec0_.vote_way as vote11_2_, votesubjec0_.display_status as display12_2_ from vote_subject votesubjec0_ where votesubjec0_.subject_status=? order by votesubjec0_.subject_id DESC
    Hibernate: select votesubjec0_.subject_id as subject1_2_, votesubjec0_.subject_name as subject2_2_, votesubjec0_.subject_state as subject3_2_, votesubjec0_.subject_message as subject4_2_, votesubjec0_.start_time as start5_2_, votesubjec0_.end_time as end6_2_, votesubjec0_.subject_number as subject7_2_, votesubjec0_.subject_status as subject8_2_, votesubjec0_.vote_status as vote9_2_, votesubjec0_.subject_banner as subject10_2_, votesubjec0_.vote_way as vote11_2_, votesubjec0_.display_status as display12_2_ from vote_subject votesubjec0_ where votesubjec0_.subject_id=?
    Hibernate: select candiate0_.candiate_id as candiate1_1_, candiate0_.candidate_name as candidate2_1_, candiate0_.candidate_college as candidate3_1_, candiate0_.candidate_class as candidate4_1_, candiate0_.candidate_motto as candidate5_1_, candiate0_.candidate_image as candidate6_1_, candiate0_.candidate_bimage as candidate7_1_, candiate0_.candidate_detail as candidate8_1_, candiate0_.candidate_votes as candidate9_1_, candiate0_.candidate_status as candidate10_1_, candiate0_.subject_id as subject11_1_ from candiate_info candiate0_ where subject_id=2
    org.hibernate.exception.SQLGrammarException: could not execute query
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.loader.Loader.doList(Loader.java:2223)
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
    at org.hibernate.loader.Loader.list(Loader.java:2099)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
    at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
    at com.tyut.dao.CandiateDao.candiateListById(CandiateDao.java:50)
    at com.tyut.service.CandiateService.candiateListById(CandiateService.java:25)
    at com.tyut.actions.CandiateAction.candiateList(CandiateAction.java:56)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
    at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
    at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
    at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:619)
      

  6.   

    Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'candiate_info' 无效。
    at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
    at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processErrorToken(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReplyToken(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSExecuteRequest.processReplyToken(Unknown Source)
    at com.microsoft.jdbc.sqlserver.tds.TDSRequest.processReply(Unknown Source)
    at com.microsoft.jdbc.sqlserver.SQLServerImplStatement.getNextResultType(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.commonTransitionToState(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.postImplExecute(Unknown Source)
    at com.microsoft.jdbc.base.BasePreparedStatement.postImplExecute(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.commonExecute(Unknown Source)
    at com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown Source)
    at com.microsoft.jdbc.base.BasePreparedStatement.executeQuery(Unknown Source)
    at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
    at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
    at org.hibernate.loader.Loader.doQuery(Loader.java:674)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    at org.hibernate.loader.Loader.doList(Loader.java:2220)
    ... 75 more
      

  7.   

    完整代码:  public class VoteSubject {
     private Integer subjectId; 
     private String subjectName; 
       get set方法
    public class Candiate {
    private Integer candiateId;
            private String candiateName;
    private String candidateStatus;
    private VoteSubject voteSubject;VoteSubject.hbm.xml:<class name="VoteSubject" table="vote_subject">
    <id name="subjectId" column="subject_id" type="java.lang.Integer">
    <generator class="native"/>
    </id>
    <property name="subjectName" column="subject_name" type="java.lang.String"/>  
    </class>Candiate.hbm.xml:<class name="Candiate" table="candiate_info">
    <id name="candiateId" column="candiate_id" type="java.lang.Integer">
    <generator class="native"/>
    </id>
    <property name="candiateName" column="candidate_name" type="java.lang.String"/>
    <property name="candidateStatus" column="candidate_status" type="java.lang.String"/>
    <many-to-one name="voteSubject" class="com.tyut.domain.VoteSubject" column="subject_id"></many-to-one>
    </class>
    public List<Candiate> candiateListById(VoteSubject votesubject) {
    Session session = null;
    List<Candiate> candiateList = null;
    try {
    session = HibernateSessionFactory.getSession();
    session.beginTransaction();
    Query query = session.createQuery("from Candiate as c where subject_id="+votesubject.getSubjectId());
    candiateList = query.list();
    session.getTransaction().commit();
    } catch (HibernateException e) {
    e.printStackTrace();
    session.getTransaction().rollback();
    }finally {
    HibernateSessionFactory.closeSession();
    }
    return candiateList;
    }
      

  8.   

    Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]对象名 'candiate_info' 无效。这异常一看不就明白了?你映射的这个 candiate_info不存在阿?还有,查询为什么要使用事务提交?update、delete、insert才用吧SQL语句你也写错了:
    Query query = session.createQuery("from Candiate as c where c.voteSubject.subjectId="+votesubject.getSubjectId());
      

  9.   

    感觉你的hql语句有问题  后面不因该是subject_id字段名 应该是属性名
    不如直接用createSQLQuery 来拼你的sql语句算了