`
卒子99
  • 浏览: 75618 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

关于两个实体发生关联产生新的属性

XML 
阅读更多

两个实体发生关联,并产生新的属性,比如订单和产品,直接发生关系,会产生数量这个属性。这个时候有两种方式解决:

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 代码
  1. <list name="orderItem" table="line_itme" lazy="true" inverse="false" optimistic-lock="true">  
  2.    <key column="order_id" />  
  3.    <index column="item_number" />  
  4.       
  5.    <composite-element class="com.us.ebuy.model.OrderItem">  
  6.     <property name="quantity" />  
  7.     <property name="productTotal"/>  
  8.     <many-to-one name="product" column="product_id" outer-join="true"/>  
  9.    </composite-element>  
  10.   </list>  
  11.   

<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 代码
  1. <key column="order_id" />  
  2. <index column="item_number" />  


<index column="item_number"></index>
这两项配置确实一条item记录,其中key元素对应Order的Key,而index是一个序号,和List中的get(int index)相对应,从0开始。

对orderItem的操作:

插入和更新可以按一般的方法处理,就不多说了

删除方法:

java 代码
  1. List list = tOrder.getOrderItem();   
  2. Vector vector = new Vector(id.length);   
  3. for (int i = 0; i < id.length; i++) {   
  4.  vector.add(list.get(Integer.parseInt(id[i])));   
  5. }   
  6. list.removeAll(vector);  

只有通过集合方式删除,如果按序号删除,每删除一个序号会变化(我想应该是这样子的),我测试过,那种删除不会成功的。

2)第二种方法是把OrderItem则单独提出来,成为一个独立的实体,和一般的many-to-one一样处理

这样做的好处就在对OrderItem操作的时候就不用老跟Order打交道了。当然在面向对象的设计上来看,就觉得怪怪的,反正灵活使用,就OK了

分享到:
评论

相关推荐

    C#数据实体类中如何给属性赋值

    在这个例子中,我们定义了一个名为`Class1`的实体类,它包含两个属性:`IntTemp`和`StrTemp`。 ```csharp public class Class1 { private int intTemp; public int IntTemp { get { return intTemp; } set { ...

    Hibernate实体关联速查表

    `mappedBy`属性用于指定关联关系的反向字段,这样可以避免在两个实体类中都写相同的关联注解。 以上就是Hibernate实体关联的基本知识点,掌握这些将有助于提升开发效率,避免数据库操作的复杂性。希望这份速查表能...

    13_jpa多对多双向关联实体定义与注解

    `mappedBy`属性指定的是另一端的属性名,`@JoinTable`定义了关联表的名称以及连接两个实体的外键。 3. **双向关联**:这里的双向关联意味着`Student`和`Course`都可以通过各自的属性访问对方。在双向关联中,必须...

    JPA实体关联(hibernate实现)

    双向的一对一关联则需要在两个实体上都进行配置,但只有一个方向是“拥有”关系,用`@OneToOne(cascade=CascadeType...)`来指定级联操作。 4. **一对多关联(JPAOneToMany)** 一对多关联意味着一个实体可以与多个...

    行业分类-外包设计-基于可传递关联矩阵的实体属性定量处理方法的说明分析.rar

    2. 构建矩阵:根据收集到的数据,构建一个可传递关联矩阵,矩阵中的每个元素表示两个实体之间的关联程度。 3. 关系分析:利用矩阵进行计算,找出具有强关联性的实体对,这有助于识别关键因素和潜在的优化路径。 4. ...

    Hibernate一对一主键关联映射(双向关联)

    这种关联通常发生在两个实体之间,且每个实体都只有一个对应的实例。本篇文章将详细探讨双向一对一主键关联映射的概念、配置以及实际应用。 首先,我们需要了解一对一关联的类型。一对一关联分为两种:基于主键的...

    Hibernate关联映射

    配置上,需要创建一个新的实体类来代表连接表,并在其中定义两个 `many-to-one` 属性,分别对应一对一关联的两个实体。 4. Hibernate 一对多外键单向关联: 在这种关联中,一个实体类(如 Department)可以有多个...

    13_JPA详解_JPA中的多对多双向关联实体定义与注解设置.zip

    在双向多对多关联中,两个实体类都能直接访问彼此的集合。例如,如果有一个`Student`实体和一个`Course`实体,一个学生可以选修多个课程,同时一个课程也可以被多个学生选修。双向关联允许从学生对象直接获取其所选...

    JPA中的多对多双向关联实体定义与注解设置

    在Java Persistence API (JPA) 中,多对多(ManyToMany)关系是表示两个实体之间复杂关联的一种方式。这种关联允许一个实体实例可以与多个其他实体实例相关联,反之亦然。例如,一个学生可以选修多门课程,一门课程...

    Hibernate ORM - 多对多双向中间实体关联关系

    首先,多对多关联意味着两个实体类之间存在多个匹配关系。例如,一个用户可以属于多个角色,同时一个角色也可以被多个用户拥有。在数据库层面,这通常通过一张包含两个外键的中间表来实现。在Hibernate中,我们可以...

    JPA中的一对一双向关联

    例如,创建新的关联时,你需要在两个实体上都设置相应的引用: ```java ParentEntity parent = new ParentEntity(); ChildEntity child = new ChildEntity(); parent.setChild(child); child.setParent(parent); ...

    基于注解的关联关系Hibernate

    这个注解可以放在属性或字段上,用于表示两个实体类之间的一个实体对应另一个实体的唯一实例。 - `@JoinColumn`注解是用于指定外键的,它包含`name`属性,用来指定数据库表中的外键列名。 - 可以使用`@...

    hibernate多对多双向关联

    多对多关联需要在两个实体类上都定义相应的关联属性。 2. **关联映射**:使用`@ManyToMany`注解在实体类的属性上,指定与之关联的另一个实体类。双向关联意味着双方都需要有对方的引用。 3. **中间表**:多对多...

    hibernate一对一主键关联映射(单项关联)

    这种关联意味着两个实体类共享相同的主键,即一个实体类的一个实例对应另一个实体类的唯一实例。 首先,我们要明确一对一主键关联映射的基本概念。在这种映射中,两个表(或实体类)通过主键进行关联,通常其中一个...

    JPA中,多个表相关联设定的方法。

    3. **多对一关联(ManyToOne)**:与一对一关联相反,这里多个实体可以关联到一个实体。在示例代码中,`Address`类有一个`Person`属性,使用`@ManyToOne`注解表示与`Person`的多对一关系。 ```java @ManyToOne Person...

    hibernate一对多关联映射(单向关联)

    首先,我们需要在两个实体类中定义对应的属性和getter、setter方法。假设我们有User类(父实体)和Order类(子实体): ```java // User.java public class User { private Long id; private String username; /...

    hibernate 关联例子

    一对一关联表示两个实体之间存在唯一的关系,即一个实体对应另一个实体的唯一实例。这种关联可以通过@OneToOne注解来实现。在配置时,需要指定targetEntity,以及可选的fetch属性(默认为EAGER,表示立即加载关联...

    Hibernate一对一唯一外键关联映射(双向关联)

    主键关联是通过两个实体的主键相等来实现一对一关系,而唯一外键关联则是在一个实体中定义另一个实体的唯一外键字段。 在Hibernate中,配置一对一唯一外键关联映射通常涉及以下步骤: 1. **实体类定义**: - 对于...

Global site tag (gtag.js) - Google Analytics