复合(联合)主键映射
通常将复合主键相关的属性,单独放到一个类中
* 此类必须实现序列化接口
* 覆写hashcode和equals方法
package com.bjsxt.hibernate;
import java.io.Serializable;
public class FiscalYearPeriodPK implements Serializable {
//核算年
private int fiscalYear;
//核算月
private int fiscalPeriod;
public int getFiscalYear() {
return fiscalYear;
}
public void setFiscalYear(int fiscalYear) {
this.fiscalYear = fiscalYear;
}
public int getFiscalPeriod() {
return fiscalPeriod;
}
public void setFiscalPeriod(int fiscalPeriod) {
this.fiscalPeriod = fiscalPeriod;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + fiscalPeriod;
result = prime * result + fiscalYear;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final FiscalYearPeriodPK other = (FiscalYearPeriodPK) obj;
if (fiscalPeriod != other.fiscalPeriod)
return false;
if (fiscalYear != other.fiscalYear)
return false;
return true;
}
}
package com.bjsxt.hibernate;
import java.util.Date;
/**
* 核算期间
* @author wangy
*
*/
public class FiscalYearPeriod {
private FiscalYearPeriodPK fiscalYearPeriodPK;
//开始日期
private Date beginDate;
//结束日期
private Date endDate;
//状态
private String periodSts;
public Date getBeginDate() {
return beginDate;
}
public void setBeginDate(Date beginDate) {
this.beginDate = beginDate;
}
public Date getEndDate() {
return endDate;
}
public void setEndDate(Date endDate) {
this.endDate = endDate;
}
public String getPeriodSts() {
return periodSts;
}
public void setPeriodSts(String periodSts) {
this.periodSts = periodSts;
}
public FiscalYearPeriodPK getFiscalYearPeriodPK() {
return fiscalYearPeriodPK;
}
public void setFiscalYearPeriodPK(FiscalYearPeriodPK fiscalYearPeriodPK) {
this.fiscalYearPeriodPK = fiscalYearPeriodPK;
}
}
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.bjsxt.hibernate.FiscalYearPeriod" table="t_fiscal_year_period">
<composite-id name="fiscalYearPeriodPK">
<key-property name="fiscalYear"/>
<key-property name="fiscalPeriod"/>
</composite-id>
<property name="beginDate"/>
<property name="endDate"/>
<property name="periodSts"/>
</class>
</hibernate-mapping>
分享到:
相关推荐
复合主键映射 <br>通常将复合主键相关属性,单独抽取出来,建立一个独立的类 * 必须实现序列化接口 * 必须实现equals和hashcode方法 采用标签进行映射,其它属性采用正常映射
3. 在使用复合主键时,要注意避免在多对一或一对多关系中直接使用复合主键作为外键,这可能导致映射问题。 总结,Hibernate对复合主键的处理为开发者提供了灵活性,使得处理复杂数据模型变得更加便捷。通过正确配置...
在某些情况下,单一字段无法唯一标识表中的记录,此时需要多个字段联合起来作为主键。例如,考虑一个学生选课表,可能包含"学生ID"和"课程ID",这两者结合才能唯一确定学生选修的特定课程。 三、Hibernate中复合...
本教程聚焦于“联合主键”这一概念,它在处理复合唯一标识符时非常有用。联合主键(Composite Key)是指由两个或多个字段共同组成的主键,这些字段单独可能不是唯一的,但组合起来确保了数据的唯一性。 在Hibernate...
### Hibernate中对数据库复合主键的支持 #### 一、引言 在软件开发过程中,特别是在J2EE领域中,Hibernate作为一种流行的ORM(Object-Relational Mapping)框架被广泛使用。ORM框架的主要作用是将关系型数据库中的...
多主键,也称为复合主键或联合主键,指的是在一个数据表中使用两个或更多的字段共同作为唯一标识符,确保每条记录的唯一性。这种设计常见于关系型数据库中,当单一字段不足以唯一标识一条记录时采用。例如,在一个...
- 使用外键:Hibernate支持实体间的外键关联,但也可以通过复合主键或联合主键实现。 - 级联操作:`cascade`属性可以配置为SAVE_UPDATE、PERSIST、MERGE、REMOVE等,决定操作一个实体时是否也影响关联的实体。 - ...
五、联合主键(Composite Key) 在某些情况下,实体的主键可能由两个或更多个字段组成。这时,我们需要使用`@EmbeddedId`和`@Embeddable`注解来定义复合主键类和其属性。`@EmbeddedId`用于指定实体的主键类,而`@...
11. 联合主键和复合主键:在某些情况下,一个表的主键由多个字段组成。Hibernate支持这种复合主键的映射。 12. 查询缓存和二级缓存:为了提高性能,Hibernate提供了缓存机制。查询缓存存储查询结果,避免重复执行...
7. **多表联合主键** 在某些情况下,两个实体可能共享一个主键,这被称为复合主键。在Hibernate中,可以使用`@PrimaryKeyJoinColumn`注解来配置这种关联。 总结,Hibernate的一对一关联映射为我们提供了灵活的...
如果需要联合主键,可以使用多个`@Id`注解或者自定义的复合主键类。 MyBatis-Plus是MyBatis的一个扩展,它提供了更丰富的功能,包括自动填充主键。在某些情况下,开发者可能会遇到MyBatis-Plus主键生成的坑,例如,...
Hibernate 提供了多种继承映射策略,如 `@Inheritance(strategy=InheritanceType.SINGLE_TABLE)`、`@DiscriminatorColumn` 和 `@DiscriminatorValue`,以支持单表继承、子类表和联合主键等。 #### 映射关联关系 - ...
- **复合主键**:`@EmbeddedId`和`@IdClass`用于处理复杂的主键结构。 - **继承映射**:支持单表继承(Single Table Inheritance)、联合继承(Joined Table Inheritance)和表-per-class-hierarchy策略。 - **...
10. **联合主键与复合主键**:在处理多字段主键时,需要理解如何在实体类和映射文件中配置联合主键或复合主键。 11. **实体继承策略**:Hibernate支持单表继承、联合继承和表-per-hierarchy等多种继承策略,根据...
- `@IdClass`:用于复合主键,定义一个持有主键属性的类。 - `@EmbeddedId`:将一个嵌入式类作为主键。 - `@GeneratedValue`:控制主键生成策略,如自增、序列等。 - `@SequenceGenerator` 和 `@TableGenerator`...
- **联合主键关联**:两个实体共同拥有一个复合主键。 - **多对一关联映射**: - **对象模型**:定义了多对一的关系。 - **关系模型**:表示数据库中的表结构。 - **关联映射本质**:通过外键实现多对一的关系。...
- 联合主键是指使用多个字段共同组成一个复合主键。 - **应用场景**: - 当单个字段不足以唯一标识一条记录时,可以考虑使用联合主键。 - **实现方式**: - 通过在实体类上使用 @IdClass 注解来定义联合主键。 ...
- **复合(联合)主键映射**:使用多个字段作为主键。 - **集合(collection)映射**:将实体类中的集合属性映射到数据库表中。 --- #### Hibernate对数据库的并发支持 在并发环境下,Hibernate提供了几种机制...