1

我有休眠配置文件如下

 <?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=?]

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

4

1 回答 1

1

您在两种不同的环境中工作:

  1. 第一个示例 - Spring-context:会话是通过 构建LocalSessionFactoryBean的,负责加载hibernate.cfg.xml和所有映射,如中所述spring-context.xml
  2. 第二个示例 - Native Hibernate:会话是使用 Hibernate 构建的Configuration,负责仅加载hibernate.cfg.xml不包含类映射的内容;添加<mapping resource="path.to.your.mappedClass.hbm.xml"/>到您hibernate.cfg.xml的解决问题。
于 2013-09-08T17:56:11.090 回答