在hibernate中,类不是映射异常

时间:2013-09-08 15:12:28

标签: hibernate

我有hibernate配置文件如下

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.password">postgres</property>
        <property name="hibernate.connection.url">jdbc:postgresql://10.162.9.130:5432/mining</property>
        <property name="hibernate.connection.username">postgres</property>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="hibernate.current_session_context_class">thread</property>
</session-factory>
</hibernate-configuration>

映射文件被编写并包含在mams-hibern.xml文件中,如下所示

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource"><ref bean="dataSource" /></property>
<property name="mappingResources">
<list>
<value>nic/mams/model/ApplicantHistory.hbm.xml</value>
<value>nic/mams/model/ApplicantAddressHistory.hbm.xml</value>
<value>nic/mams/model/ApplicantContactHistory.hbm.xml</value>
<value>nic/mams/model/ApplicantLeases.hbm.xml</value>
<value>nic/mams/model/GeneratedChallan.hbm.xml</value>
<value>nic/mams/model/OffenderType.hbm.xml</value>
<value>nic/mams/model/OffenceDetailRule.hbm.xml</value>
<value>nic/mams/model/TemperoryAppNotes.hbm.xml</value>
<value>nic/mams/model/TemperoryFilePath.hbm.xml</value>
<value>nic/mams/model/OtherDocuments.hbm.xml</value>
<value>nic/mams/model/OffenceSubactsRules.hbm.xml</value>
<value>nic/mams/model/OffenceActRules.hbm.xml</value>
<value>nic/mams/model/Vehicles.hbm.xml</value>
<value>nic/mams/model/ApprovedMajorMineral.hbm.xml</value>
<value>nic/mams/model/GoogleImage.hbm.xml</value>
<value>nic/mams/model/PasswordHistory.hbm.xml</value>
<value>nic/mams/model/LeaseTransfer.hbm.xml</value>
<value>nic/mams/model/TransferApplicantCompany.hbm.xml</value>
<value>nic/mams/model/MailSettings.hbm.xml</value>
<value>nic/mams/model/LeaseCompanyAddress.hbm.xml</value>
<value>nic/mams/model/FinancialYear.hbm.xml</value>
<value>nic/mams/model/IncomeTax.hbm.xml</value>
<value>nic/mams/model/AdditionalCharge.hbm.xml</value>
<value>nic/mams/model/MenuPrivileges.hbm.xml</value>
<value>nic/mams/model/AddressType.hbm.xml</value>
<value>nic/mams/model/AdvaloramRoyalty.hbm.xml</value>
<value>nic/mams/model/Agent.hbm.xml</value>
<value>nic/mams/model/AppJawsize.hbm.xml</value>
<value>nic/mams/model/Applicant.hbm.xml</value>
<value>nic/mams/model/ApplicantAddress.hbm.xml</value>
<value>nic/mams/model/ApplicantCompany.hbm.xml</value>
<value>nic/mams/model/ApplicantContact.hbm.xml</value>
<value>nic/mams/model/ApplicantLogin.hbm.xml</value>
<value>nic/mams/model/ApplicantStatus.hbm.xml</value>
<value>nic/mams/model/Application.hbm.xml</value>
<value>nic/mams/model/ApplicationDocument.hbm.xml</value>
<value>nic/mams/model/ApplicationHistory.hbm.xml</value>
<value>nic/mams/model/ApplicationMineral.hbm.xml</value>
<value>nic/mams/model/ApplicationSpecificQuery.hbm.xml</value>
<value>nic/mams/model/ApplicationSpecificQueryValues.hbm.xml</value>
<value>nic/mams/model/ApplicationStatus.hbm.xml</value>
<value>nic/mams/model/ApplicationSurvey.hbm.xml</value>
<value>nic/mams/model/ApplicationType.hbm.xml</value>
<value>nic/mams/model/ApplnSecurityFee.hbm.xml</value>
<value>nic/mams/model/AreaSpecification.hbm.xml</value>
<value>nic/mams/model/Bank.hbm.xml</value>
</property>
</beans>

以下代码已成功执行,

Applicant applicant=null;
Object[] ob={leaseNo,Integer.parseInt(appType)};
Session session=getHibernateTemplate().getSessionFactory().openSession();
Transaction tx=session.beginTransaction();
if(session!=null){
    Query query=session.createQuery("select a from Applicant as a inner join a.applications as b inner join " +
    "b.applicationType as c inner join b.permits as d where d.permitNo=? and c.applicationTypeId=?");
    query.setParameters(ob,  new Type []{Hibernate.STRING,Hibernate.INTEGER});
    @SuppressWarnings("unchecked")
    List<Applicant> apllApplicants=query.list();

}
tx.commit();

我的问题是在执行以下代码时,发生了异常

    SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
Session session =  sessionFactory.getCurrentSession();              
Transaction tx=session.beginTransaction();
Query query=session.createQuery("select a from Applicant as a inner join a.applications as b inner join " +
        "b.applicationType as c inner join b.permits as d where d.permitNo=? and c.applicationTypeId=?");
query.setParameters(ob,  new Type []{Hibernate.STRING,Hibernate.INTEGER});
@SuppressWarnings("unchecked")
List<Applicant> apllApplicants=query.list();
tx.commit();

例外是

org.hibernate.hql.ast.QuerySyntaxException: Applicant is not mapped d [select a from Applicant as a inner join a.applications as b inner join b.applicationType as c inner join b.permits as d where d.permitNo=? and c.applicationTypeId=?]

这是什么解决方案。任何人都知道请帮帮我

1 个答案:

答案 0 :(得分:1)

您正在两个不同的背景下工作:

  1. 第一个示例 - Spring-context :会话是通过LocalSessionFactoryBean构建的,负责加载hibernate.cfg.xml和所有映射,如spring-context.xml
  2. 中所述
  3. 第二个例子 - Native Hibernate :Session是使用Hibernate的Configuration构建的,负责加载ONLY hibernate.cfg.xml,它不包含类映射;将<mapping resource="path.to.your.mappedClass.hbm.xml"/>添加到hibernate.cfg.xml以解决问题。