当前位置: 首页 > 知识库问答 >
问题:

使用HibernateXML映射额外列映射多对多关系的困难

施博文
2023-03-14

我正在hibernate的帮助下开发一个电子购物程序。因为我是jsp、servlet、hibernate的新手,我不知道如何使用关系表中的附加列进行多对多关系映射。我已经阅读了几篇教程,但其中大部分都是关于hibernate社区的注释映射和文档,但没有一篇适合我的情况。

我有三个表,分别是电影信息表、订单详情表和订单详情表(关系表),其中订单详情表的结构如下所示。

order_details
-------------
order_id FK
movie_id FK
quantity
-------------

我正在尝试使用四个POJO类来实现多对多关系。代码来了。

电影信息。Java语言

// other variable, constructor, getter, setter
private Set<OrderDetails> orderDetails = new HashSet<OrderDetails>();

顺序Java语言

// other variable, constructor, getter, setter
private Set<OrderDetails> orderDetails = new HashSet<OrderDetails>();

订单Details.java

private OrderDetailsPK primaryKey;
private Order order;
private MovieInformation movie;
private int quantity;    

OrderDetailsPK。Java语言

private long orderId;
private long movieId;

电影信息。hbm。xml

<id column="movie_id" name="movieId" type="long">
    <generator class="native"/>
</id>

 // some property

<set name="orderDetails" table="order_details" inverse="true" lazy="true" fetch="select">
    <key>
        <column name="movie_id" not-null="true" />
    </key>
    <one-to-many class="cart.hibernate.orderDetails.orderDetails" />
</set>

顺序hbm。xml

<id column="order_id" name="orderId" type="long">
    <generator class="native"/>
</id>

//some properties

<set name="orderDetails" table="order_details" inverse="true" lazy="true" fetch="select">
    <key>
        <column name="order_id" not-null="true" />
    </key>
    <one-to-many class="cart.hibernate.orderDetails.orderDetails" />
</set>

订单Details.hbm.xml

<composite-id name="orderDetailsPK" class="cart.hibernate.orderDetailsPK.OrderDetailsPK">
  <key-property column="order_id" name="orderId" type="long"/>
  <key-property column="movie_id" name="movieId" type="long"/>
</composite-id>

<many-to-one name="order" class="cart.hibernate.order.Order" insert="false" update="false"/>
<many-to-one name="movie" class="cart.hibernate.movieInformation.MovieInformation" insert="false" update="false"/>
<property column="quantity" name="quantity" type="int"/>

OrderDetailsPK。hbm。xml

<class name="cart.hibernate.orderDetailsPK.OrderDetailsPK" >
  <property  name="orderId" type="long"/>
<property name="movieId" type="long"/>

hibernate.cfg.cml

<mapping class="cart.hibernate.MovieInformation" package="cart.hibernate.movieInformation" resource="cart/hibernate/movieInformation/MovieInformation.hbm.xml"/>        
<mapping class="cart.hibernate.Order" package="cart.hibernate.order" resource="cart/hibernate/order/Order.hbm.xml"/>
<mapping class="cart.hibernate.OrderDetails" package="cart.hibernate.orderDetails" resource="cart/hibernate/orderDetails/OrderDetails.hbm.xml"/>
<mapping class="cart.hibernate.OrderDetailsPK" package="cart.hibernate.orderDetailsPK" resource="cart.hibernate.orderDetailsPK/OrderDetailsPK.hbm.xml"/>

当我尝试运行测试main方法时,程序引发了异常

887 [main] INFO org.hibernate.cfg.Configuration - Reading mappings from resource : 
cart.hibernate.orderDetailsPK/OrderDetailsPK.hbm.xml
Initial SessionFactory creation failed.org.hibernate.MappingNotFoundException: resource: cart.hibernate.orderDetailsPK/OrderDetailsPK.hbm.xml not found
Exception in thread "main" java.lang.ExceptionInInitializerError
    at cart.hibernate.HibernateUtil.buildSessionFactory(HibernateUtil.java:28)
    at cart.hibernate.HibernateUtil.<clinit>(HibernateUtil.java:18)
    at cart.hibernate.order.ManageOrder.main(ManageOrder.java:40)
Caused by: org.hibernate.MappingNotFoundException: resource: cart.hibernate.orderDetailsPK/OrderDetailsPK.hbm.xml not found
    at org.hibernate.cfg.Configuration.addResource(Configuration.java:799)
    at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:2344)
    at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:2310)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2290)
    at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:2243)
    at org.hibernate.cfg.Configuration.configure(Configuration.java:2158)
    at cart.hibernate.HibernateUtil.buildSessionFactory(HibernateUtil.java:23)
    ... 2 more

在我阅读了其他人提出的问题后,我相信我的代码中的错误是由错误的映射代码引起的。希望你们能帮助我解决这个问题。如果提供一些带有额外列的多对多映射的简单示例就好了。

共有1个答案

鄂伟兆
2023-03-14

我相信你的代码是干净的,因为控制台告诉你MappingNotFoundException一旦加载了hibernate文件,就找不到了。确保模型bean包中的hibernate文件不在源代码中。

 类似资料:
  • 您好,我有多对多映射,在联接表中有额外的列。表结构如下所示。 关系如下 链接 我创建了如下POJO类 Vendor.java 学生。爪哇 测试。爪哇 供应商est.java 供应商学生测试PK。爪哇 Hibernate映射文件,如下所示 vendor.hbm.xml vendor\u student\u测试。hbm。xml 大学生hbm。xml 测验hbm。xml 我刚开始Hibernate,这是

  • 我想使用XML映射在Hibernate中映射多对多的关系。 我有两个类,和。我想创建一个链接表女巫将包含复合键和3个额外的列

  • 问题内容: 我的数据库包含3个表:User和Service实体具有多对多关系,并与SERVICE_USER表联接在一起,如下所示: 用户-SERVICE_USER-服务 SERVICE_USER表包含附加的BLOCKED列。 执行这种映射的最佳方法是什么?这些是我的实体类 我遵循以下示例http://giannigar.wordpress.com/2009/09/04/m … using-jpa

  • 有两张数据表,通过第三张数据表来表示关联关系,我们称之为多对多的映射 如上图,通过一个中间数据表的两个字段,分别指向两个对象的主键,可以实现多对多映射。所以,Pet.foods(一个 List<Food>) 或者 Food.pets(一个List<Pet>)就是多对多映射。 在 POJO 中配置多对多映射 在 POJO 类中字段中增加注解 @ManyMany: @Table("t_food")

  • 1. 前言 本节课,咱们一起继续聊聊多对多关联映射。通过本节课程,你将了解到: 多对多关联映射的实现; 双向多对多关联映射的实现。 2. 多对多关联映射 首先了解表中的多对多关系,学生表中的数据和课程表中的数据就存在多对多关系。 一名学生可以选修多门课程,一门课程可以供多名学生选修。 数据库通过主外键的机制描述表中的数据之间的关系。对于存在多对多关系的数据表,借助于中间表,分拆成两个一对多(或者多

  • 本文向大家介绍mybatis关系映射之一对多和多对一,包括了mybatis关系映射之一对多和多对一的使用技巧和注意事项,需要的朋友参考一下 本实例使用用户和订单的例子做说明: 一个用户可以有多个订单, 一个订单只对应一个用户。(其中应用到注释) 1.代码的结构 2. 建表语句: 3. 用户实体: 4. 订单实体: 5.写PersonMapper.java的接口 6. 一对多实体配置: Person