两个实体发生关联,并产生新的属性,比如订单和产品,直接发生关系,会产生数量这个属性。这个时候有两种方式解决:
1)把订单项设置成为order的一个组合元素,如使用List
public class Order extends BaseObject {
/**
* 定单编号
*/
protected String orderSN;
/**
* 下订时间
*/
protected Date orderTime;
.............................................
/**
* 订单项
*/
protected List orderItem = new ArrayList();
..................................................................//省略其它属性
}
OrderItem.java
*/
public class OrderItem extends BaseObject {
/**
* 产品
*/
protected Product product;
/**
* 产品数量
*/
protected Integer quantity;
...................................//省略其它属性
}
这样就建立了两个实体的联系,再看配置文件Order.hbm.xml中关于List的配置
<list name="orderItem" table="line_itme" inverse="false" optimistic-lock="true" lazy="true"></list>
xml 代码
- <list name="orderItem" table="line_itme" lazy="true" inverse="false" optimistic-lock="true">
- <key column="order_id" />
- <index column="item_number" />
-
- <composite-element class="com.us.ebuy.model.OrderItem">
- <property name="quantity" />
- <property name="productTotal"/>
- <many-to-one name="product" column="product_id" outer-join="true"/>
- </composite-element>
- </list>
-
<many-to-one name="product" column="product_id" outer-join="true"></many-to-one>note:invser=false,表明OrderItem的添加,更新,删除操作均要通过Order来完成
<key column="order_id"></key>
xml 代码
- <key column="order_id" />
- <index column="item_number" />
<index column="item_number"></index>
这两项配置确实一条item记录,其中key元素对应Order的Key,而index是一个序号,和List中的get(int index)相对应,从0开始。
对orderItem的操作:
插入和更新可以按一般的方法处理,就不多说了
删除方法:
java 代码
- List list = tOrder.getOrderItem();
- Vector vector = new Vector(id.length);
- for (int i = 0; i < id.length; i++) {
- vector.add(list.get(Integer.parseInt(id[i])));
- }
- list.removeAll(vector);
只有通过集合方式删除,如果按序号删除,每删除一个序号会变化(我想应该是这样子的),我测试过,那种删除不会成功的。
2)第二种方法是把OrderItem则单独提出来,成为一个独立的实体,和一般的many-to-one一样处理
这样做的好处就在对OrderItem操作的时候就不用老跟Order打交道了。当然在面向对象的设计上来看,就觉得怪怪的,反正灵活使用,就OK了
分享到:
相关推荐
在这个例子中,我们定义了一个名为`Class1`的实体类,它包含两个属性:`IntTemp`和`StrTemp`。 ```csharp public class Class1 { private int intTemp; public int IntTemp { get { return intTemp; } set { ...
`mappedBy`属性用于指定关联关系的反向字段,这样可以避免在两个实体类中都写相同的关联注解。 以上就是Hibernate实体关联的基本知识点,掌握这些将有助于提升开发效率,避免数据库操作的复杂性。希望这份速查表能...
`mappedBy`属性指定的是另一端的属性名,`@JoinTable`定义了关联表的名称以及连接两个实体的外键。 3. **双向关联**:这里的双向关联意味着`Student`和`Course`都可以通过各自的属性访问对方。在双向关联中,必须...
双向的一对一关联则需要在两个实体上都进行配置,但只有一个方向是“拥有”关系,用`@OneToOne(cascade=CascadeType...)`来指定级联操作。 4. **一对多关联(JPAOneToMany)** 一对多关联意味着一个实体可以与多个...
2. 构建矩阵:根据收集到的数据,构建一个可传递关联矩阵,矩阵中的每个元素表示两个实体之间的关联程度。 3. 关系分析:利用矩阵进行计算,找出具有强关联性的实体对,这有助于识别关键因素和潜在的优化路径。 4. ...
这种关联通常发生在两个实体之间,且每个实体都只有一个对应的实例。本篇文章将详细探讨双向一对一主键关联映射的概念、配置以及实际应用。 首先,我们需要了解一对一关联的类型。一对一关联分为两种:基于主键的...
配置上,需要创建一个新的实体类来代表连接表,并在其中定义两个 `many-to-one` 属性,分别对应一对一关联的两个实体。 4. Hibernate 一对多外键单向关联: 在这种关联中,一个实体类(如 Department)可以有多个...
在双向多对多关联中,两个实体类都能直接访问彼此的集合。例如,如果有一个`Student`实体和一个`Course`实体,一个学生可以选修多个课程,同时一个课程也可以被多个学生选修。双向关联允许从学生对象直接获取其所选...
在Java Persistence API (JPA) 中,多对多(ManyToMany)关系是表示两个实体之间复杂关联的一种方式。这种关联允许一个实体实例可以与多个其他实体实例相关联,反之亦然。例如,一个学生可以选修多门课程,一门课程...
首先,多对多关联意味着两个实体类之间存在多个匹配关系。例如,一个用户可以属于多个角色,同时一个角色也可以被多个用户拥有。在数据库层面,这通常通过一张包含两个外键的中间表来实现。在Hibernate中,我们可以...
例如,创建新的关联时,你需要在两个实体上都设置相应的引用: ```java ParentEntity parent = new ParentEntity(); ChildEntity child = new ChildEntity(); parent.setChild(child); child.setParent(parent); ...
这个注解可以放在属性或字段上,用于表示两个实体类之间的一个实体对应另一个实体的唯一实例。 - `@JoinColumn`注解是用于指定外键的,它包含`name`属性,用来指定数据库表中的外键列名。 - 可以使用`@...
多对多关联需要在两个实体类上都定义相应的关联属性。 2. **关联映射**:使用`@ManyToMany`注解在实体类的属性上,指定与之关联的另一个实体类。双向关联意味着双方都需要有对方的引用。 3. **中间表**:多对多...
这种关联意味着两个实体类共享相同的主键,即一个实体类的一个实例对应另一个实体类的唯一实例。 首先,我们要明确一对一主键关联映射的基本概念。在这种映射中,两个表(或实体类)通过主键进行关联,通常其中一个...
3. **多对一关联(ManyToOne)**:与一对一关联相反,这里多个实体可以关联到一个实体。在示例代码中,`Address`类有一个`Person`属性,使用`@ManyToOne`注解表示与`Person`的多对一关系。 ```java @ManyToOne Person...
首先,我们需要在两个实体类中定义对应的属性和getter、setter方法。假设我们有User类(父实体)和Order类(子实体): ```java // User.java public class User { private Long id; private String username; /...
1:1(一对一)关联表示两个实体之间存在一对一的关系,例如一个人对应一张唯一的身份证。在Hibernate中,可以通过`<one-to-one>`标签实现。如示例所示,`Person`类和`IDCard`类之间的关联就是这样设置的。在`Person....
一对一关联表示两个实体之间存在唯一的关系,即一个实体对应另一个实体的唯一实例。这种关联可以通过@OneToOne注解来实现。在配置时,需要指定targetEntity,以及可选的fetch属性(默认为EAGER,表示立即加载关联...
主键关联是通过两个实体的主键相等来实现一对一关系,而唯一外键关联则是在一个实体中定义另一个实体的唯一外键字段。 在Hibernate中,配置一对一唯一外键关联映射通常涉及以下步骤: 1. **实体类定义**: - 对于...