JPA Hibernate - 将嵌入式集合映射到单个表

时间:2014-02-14 02:42:09

标签: java hibernate jpa jpa-2.0

我有一个包含很多字段的表,例如

帐户

OrderNo

期限

LegNo

LegSymbol

LegSymbolType

LegExchangeType

等等

上表的主键是一个复合键,包括Account,OrderNo& LEGNO

数据库中的数据看起来像这样

1234 1 2 1 AAA BBB CCC

1234 1 2 2 DDD EEE FFF

粗体分别是Account,Order,LegNo。

在设计上表的实体时,我们希望将所有与Leg相关的信息(所有粗体列)分组到一个单独的类中,并将实体中的所有其他信息分组

因此,主要订单实体将包含嵌入对象Leg。 (我假设Leg不会被定义为实体,因为它不是一个单独的表)。

@Entity
@Table(name="xxx")
public class Order implements Serializable {

    ... All order specific fields & it's getters/setters

}

@Embeddable
public class Leg implements Serializable {

  private long legNo;
  private String legSymbol;

  ...
  ...
}

我假设订单实体将持有帐户,orderNo,Term信息和OrderLeg嵌入对象将是其他信息,如上所述。

我们可以为上述记录中显示的相同顺序设置多条腿。因此,我们可能需要在Order实体中包含leg的集合。

我们能否实现这项功能,因为我们只有一张桌子?我们无法更改表的架构或创建新表,因为它不受我们的控制。

我尝试在Leg List上的Order Entity中使用@ElementCollection,但看起来,当我尝试保留新订单时,Leg细节不会被视为查询的一部分。

如果我将hibernate.hbm2ddl.auto = create作为persistence.xml的一部分,它会删除现有的架构并更改现有的订单表以仅保留订单信息,并创建一个单独的支柱表来保存支路信息。是不希望的。

@Entity
@Table(name="xxx")
public class Order implements Serializable {

**@ElementCollection
private List<Leg> a = new ArrayList<Leg>();**
}

设置为Leg类的值(例如LegNo,LegSymbol等)根本不包含在插入查询中,因为LegNo是表中的必填字段,所以我总是得到一个例外。

请告知..

0 个答案:

没有答案