我正在使用休眠框架的Java JSP Web应用程序上工作。
我是JSP / hibernate的初学者,我似乎无法让hibernate正常工作。
我已遵循本教程:https://netbeans.org/kb/docs/web/hibernate-webapp.html
一切正常。我将xampp与phpmyadmin一起使用,并且可以通过hibernate.cfg.xml文件执行HQL查询。
然后,我尝试对用于Web应用程序的数据库进行同样的操作。遵循所有步骤并完成所有向导。但是我无法执行HQL查询。
给出以下错误:
org.hibernate.MappingException: An association from the table campingsperfestival refers to an unmapped class: festivalOverview.Campings
at org.hibernate.cfg.Configuration.secondPassCompileForeignKeys(Configuration.java:1252)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1170)
at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:324)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)
at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
我遵循了数据库向导中的Hibernate映射文件和POJO,它为数据库中的所有表(一个表:“ campingsperfestival”表)生成了一个.java和.hbm.xml文件。我再次完成了该向导几次,并重新启动了该向导,但是它仍然没有为“ campingsperfestival”表生成.java和.hbm.xml文件。
“ campingsperfestival”表是具有两个ID的表,两个ID都具有外键。有些节日和露营都具有ID,“ campingsperfestival”与一个表中的2个ID相匹配。
Campings.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 20-apr-2013 12:04:37 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="festivalOverview.Campings" table="campings" catalog="groep11_festivals">
<id name="campId" type="java.lang.Integer">
<column name="camp_id" />
<generator class="identity" />
</id>
<property name="campAdres" type="string">
<column name="camp_adres" not-null="true" />
</property>
<property name="campCap" type="int">
<column name="camp_cap" not-null="true" />
</property>
<set name="festivalses" inverse="true" table="campingsperfestival">
<key>
<column name="camp_id" not-null="true" />
</key>
<many-to-many entity-name="festivalOverview.Festivals">
<column name="fest_id" not-null="true" />
</many-to-many>
</set>
<set name="facpercamps" inverse="true">
<key>
<column name="camp_id" not-null="true" />
</key>
<one-to-many class="festivalOverview.Facpercamp" />
</set>
</class>
</hibernate-mapping>
Festivals.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 20-apr-2013 12:04:37 by Hibernate Tools 3.2.1.GA -->
<hibernate-mapping>
<class name="festivalOverview.Festivals" table="festivals" catalog="groep11_festivals">
<id name="festId" type="java.lang.Integer">
<column name="fest_id" />
<generator class="identity" />
</id>
<property name="festNaam" type="string">
<column name="fest_naam" length="100" not-null="true" />
</property>
<property name="festLocatie" type="string">
<column name="fest_locatie" length="200" not-null="true" />
</property>
<property name="festDatum" type="date">
<column name="fest_datum" length="10" not-null="true" />
</property>
<property name="festDuur" type="byte">
<column name="fest_duur" not-null="true" />
</property>
<set name="ticketses" inverse="true">
<key>
<column name="fest_id" not-null="true" />
</key>
<one-to-many class="festivalOverview.Tickets" />
</set>
<set name="bandsperfestivals" inverse="true">
<key>
<column name="fest_id" not-null="true" />
</key>
<one-to-many class="festivalOverview.Bandsperfestival" />
</set>
<set name="campingses" inverse="false" table="campingsperfestival">
<key>
<column name="fest_id" not-null="true" />
</key>
<many-to-many entity-name="festivalOverview.Campings">
<column name="camp_id" not-null="true" />
</many-to-many>
</set>
<set name="tickettypesperfestivals" inverse="true">
<key>
<column name="fest_id" not-null="true" />
</key>
<one-to-many class="festivalOverview.Tickettypesperfestival" />
</set>
</class>
</hibernate-mapping>
我只是一个休眠的初学者,真的不知道如何解决这个问题。任何帮助是极大的赞赏!
最佳答案
我假设Campingsperfestival是Campings和Festival两个课程之间的联接表?您是否同时定义了这些类及其映射?
您遇到的错误是说它不能创建campingsperfestival,因为它是指Campings,它没有定义为休眠类。因此,请确保已定义Campings,并且您的映射正确。
如果您仍然不清楚,如果您显示野营和节日的Java /映射,我们可能会提供更多帮助。
顺便说一句,如果这是一个您要着手的新项目,我真的建议您使用基于注释的休眠类。您可能会发现,自己创建休眠实体类(而不是使用netbeasns)会获得更高的学习体验,但这取决于个人喜好。