组件作为联合标识符,必须满足:
它必须实现java.io.Serializable接口
它必须重新实现equals()和hashCode()方法, 始终和组合关键字在数据库中的概念保持一致
你不能使用一个IdentifierGenerator产生组合关键字。一个应用程序必须分配它自己的标识符。
【注意:在Hibernate3中,第二个要求并非是Hibernate强制必须的。但最好这样做。】
<class name="com.jason.compositeId.OrderDetail" table="t_orderdetail">
<composite-id name="id" class="com.jason.compositeId.CompositeId">
<key-property name="orderId" column="order_id" />
<key-property name="itemId" column="item_id" />
</composite-id>
<property name="count" column="count" type="int" />
</class>
<!--
create table t_orderdetail ( order_id bigint not null, item_id bigint not null, count bigint not null, primary key(order_id, item_id) )
-->
public class CompositeId implements Serializable{
private int orderId;
private int itemId;
public int getItemId() {
return itemId;
}
public void setItemId(int itemId) {
this.itemId = itemId;
}
public int getOrderId() {
return orderId;
}
public void setOrderId(int orderId) {
this.orderId = orderId;
}
@Override
public boolean equals(Object obj) {
return super.equals(obj);
}
@Override
public int hashCode() {
return (orderId + itemId)^2;
}
}
public class OrderDetail {
private CompositeId id;
private int count;
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public CompositeId getId() {
return id;
}
public void setId(CompositeId id) {
this.id = id;
}
}
分享到:
相关推荐
**正文** 在Java开发中,Hibernate是一个非常流行的Object-Relational Mapping(ORM)框架,它...通过研究这个压缩包,你可以深入学习如何在实际项目中有效地使用Hibernate处理复合键,从而提升你的Java和ORM技能。
- **COMPOSITE-ID**: 复合主键。 - **PROPERTY**: 映射到数据库表的字段。 #### 6. 关联关系映射 - **单向关联(UNIDIRECTIONAL ASSOCIATIONS)**: - **多对一(many-to-one)**: 实体间的多对一关系。 - **一对一...
1. 使用`@IdClass`或XML中的`composite-id`定义联合主键。 2. 联合主键需要重写equals和hashCode方法,实现Serializable接口。 七、Hibernate核心接口 1. `Configuration`接口: - 提供了管理配置信息的方法,用于...
联合主键映射涉及到多个字段共同构成主键的情况,可以使用 `<composite-id>` 标签来定义这些字段,并通过 `<key-property>` 或 `<key-many-to-one>` 子标签映射每个组成部分。 组件映射允许我们将一个类的属性映射...
- **复合主键映射**:当需要多个字段共同构成主键时,可以使用`<composite-id>`标签。 4. **数据操作与事务处理**: - **数据保存**:使用`save()`方法将对象持久化到数据库。 - **数据删除**:使用`delete()`...
2. **Composite Types**(复合类型):如数组和记录。 3. **Reference Types**(引用类型):指向其他对象的引用。 4. **LOB Types**(大对象类型):用于存储大量数据,如文本、图像等。 例如: ```plsql DECLARE ...
1. **@IdClass**:这种方式需要创建一个单独的类来表示联合主键,这个类需要实现Serializable接口,并且每个主键字段都用@Id注解标识。然后在实体类上使用@IdClass注解,指定这个主键类。 2. **@EmbeddedId**:这种...
- **主键(Primary Key)**: 通过`@Id`注解定义,标识实体的唯一标识符。 - **关系映射(Relationship Mapping)**: 包括一对一、一对多、多对一和多对多关系,使用`@OneToOne`, `@OneToMany`, `@ManyToOne`, `@...
在映射文件中,使用 `<composite-id>` 标签来指定主键类,然后通过 `<key-property>` 标签映射各个主键字段。例如,`FiscalYearPeriod` 类的主键由 `fiscalYear` 和 `fiscalPeriod` 组成,对应的 `...
- **Composite-id**:用于联合主键映射,当表的主键由多个字段组成时使用。 - **Timestamp**:可选的属性,用于记录对象的修改时间。 - **Property**:表示Java类的普通属性,可以是基本类型或复杂类型。 6. **...
- **composite-id**:处理复合主键。 - **鉴别器**:在多态映射中区分子类。 - **版本**:支持乐观锁机制。 - **timestamp**:自动更新时间戳字段。 - **Property**:映射实体类的属性。 - **多对一**、**一对一**、...
- `<id>`和`<composite-id>`元素定义了主键。 - 标识符生成器(Identifier Generator)用于自动生成主键,例如`increment`、`native`、`sequence`等。 - `<property>`元素映射类的属性到数据库字段,包括字段类型、...
1. **定义View类**:创建一个继承自`ViewPart`的类,重写`createPartControl()`方法来创建视图的 SWT 控件,如Composite或TableViewer。 2. **注册视图**:在插件的`plugin.xml`文件中,定义视图的ID、标签、图标等...
5.1.5. composite-id 5.1.6. 鉴别器(discriminator) 5.1.7. 版本(version)(可选) 5.1.8. timestamp (可选) 5.1.9. property 5.1.10. 多对一(many-to-one) 5.1.11. 一对一 5.1.12. 自然ID(natural-id) ...