在使用hibernate时有时会碰到配置复合主键和使用,例如下面表就是使用了一个复合主键的
那么在配置hibernate文件时就的使用composite-id来标识是复合主键了其部分代码如下:
<composite-id name="id" class="com.targ.adaptoflow.formdesign.form.domain.FormId">
<key-property name="formId" column="formId" type="string" length="40"></key-property>
<key-property name="formVersion" column="formVersion" type="string" length="10"></key-property>
</composite-id>
最主要的是这里边使用FormId类来标识了该主键,该类的代码如下(其实该类也就是重写了equals和hasCode方法
public class FormId implements java.io.Serializable {
private String formId;
private String formVersion;
public FormId() {
// TODO Auto-generated constructor stub
}
public FormId(String formId, String formVersion) {
this.formId = formId;
this.formVersion = formVersion;
}
@Override
public boolean equals(Object obj) {
if(obj == null) return false;
if(!(obj instanceof FormId)) return false;
FormId that = (FormId) obj;
if(that.getFormId().equals(this.getFormId()) && that.getFormVersion().equals(this.getFormVersion())) {
return true;
} else {
return false;
}
}
@Override
public int hashCode() {
return this.getFormId() == null ? 0 : this.getFormId().hashCode() * 37 + this.getFormVersion() == null ? 0 : this.getFormVersion().hashCode() * 37;
}
public String getFormId() {
return formId;
}
public void setFormId(String formId) {
this.formId = formId;
}
public String getFormVersion() {
return formVersion;
}
public void setFormVersion(String formVersion) {
this.formVersion = formVersion;
}
}
):
其他的配置还和以前的规则一样了。
现在就要谈它的应用了,有时候在程序中需要用到复合主键里边的一个字段进行判断那么hql如何下了,我们现在假设需要用到复合主键里的formId进行判断,那么hql语句应该这样写:
写道
String hql =" from Form fm where fm.id.formId = '"+formId+"'";
可以看到在hql可以通过fm.id.formId来访问数据库formId字段
List<FormVO> formList = formDao.getListByHql("select new com.targ.adaptoflow.formdesign.form.vo.FormVO(fm.id , fm.formName ,fm.isCurVersion) from Form as fm where fm.formModelId = '"+formModelId+"' group by fm.id , fm.formName ,fm.isCurVersion order by isCurVersion desc ");
上面里的group by fm.id ,也采用的复合主键,相关的代码可以查看附件看看,希望对大家提供帮助
- 大小: 6.6 KB
分享到:
相关推荐
本教程将深入探讨如何在Hibernate中设置复合主键,并提供一个可直接使用的配置示例。 一、理解复合主键 在数据库设计中,复合主键是指由两个或更多列组成的键,这些列共同构成表的唯一标识。当单一的字段无法唯一...
在Hibernate中,我们可以通过实现`Serializable`接口并使用`@Embeddable`和`@EmbeddedId`注解来定义和管理复合主键。 首先,我们需要创建一个代表复合主键的类。例如,对于订单明细表,我们可以创建一个名为`...
在Java的持久化框架Hibernate中,复合主键(Composite Key)是一种特殊的数据结构,用于处理具有多个字段作为唯一标识的情况。本实例将深入探讨如何在...希望这个实例能帮助你理解和掌握Hibernate中复合主键的使用。
本篇文章将深入探讨Hibernate如何支持和管理复合主键。 一、理解复合主键 在数据库设计中,复合主键是一种特殊情况,当单个字段不能唯一标识表中的每一行时,可以使用两个或多个字段的组合来创建唯一的标识。例如...
### Hibernate复合主键详解 在关系型数据库设计中,经常会出现使用多个字段组合起来作为主键的情况,这种类型的主键被称为复合主键。而在Java领域,尤其是使用Hibernate框架进行持久化操作时,复合主键的应用变得尤...
该示例应用演示了两张表ITEM和CATEGORY_ITEM表有主外键关系,并且ITEM表的PK(ITEM_ID)是字符串,而CATEGORY_ITEM使用复合主键(CATEGORY_ID, ITEM_ID),FK是ITEM_ID字段。那么,我们这里的解决方案是使用uuid.hex...
在Hibernate的映射配置文件(通常是`.hbm.xml`文件)中,我们需要使用`<composite-id>`标签来声明复合主键。`<composite-id>`标签的`name`属性应设置为实体类中复合主键属性的名称,即`FiscalYearPeriod`中的`...
总结来说,使用Hibernate3的注解,我们可以更加简洁地定义复合主键和嵌入式主键,避免了XML配置文件的繁琐。这种方法使得代码更易于理解和维护,尤其是在大型项目中,注解的使用能够提高开发效率并减少出错的可能性...
例如,在上述文档中的`person`表就使用了`name`和`phone`两个字段作为复合主键。这种设计方式非常适合于需要联合多个字段才能唯一确定一个实体的场景。 #### 三、数据库设计 在创建具有复合主键的表时,需要在SQL...
在双主键且有外键的情况下,可以嵌套使用和元素来定义复合主键和对应的外键关系。对于双主键中的两个主键都被作为外键使用的情况,可以在复合主键内部定义好映射关系,并使用来分别标识这些字段作为外键。 ...
这时,我们需要使用`@EmbeddedId`和`@Embeddable`注解来定义复合主键类和其属性。`@EmbeddedId`用于指定实体的主键类,而`@Embeddable`则用于声明这个类为复合主键类。 六、延迟加载(Lazy Loading) Hibernate...
**第四部分:Hibernate复合主键** 复合主键在数据库设计中并不罕见,当一个表的主键由两个或更多字段组成时,就需要使用。在Hibernate中,可以使用@EmbeddedId和@IdClass注解来处理复合主键。@EmbeddedId将一个包含...
### Hibernate最常见的主键配置 #### 一、单主键、没有外键的Hibernate配置实例 在Hibernate中,单主键且没有外键关联是最常见的一种情况。这种配置方式适用于那些独立存在的实体对象,它们通常只有一个标识符(ID...
4. 复合主键配置:当一个实体的主键由多个属性组成时,可以使用复合主键。直接映射是在hbm.xml文件中直接定义各个属性,间接映射则是通过一个专门的类来表示复合主键,然后在实体类中引用该类。 5. Hibernate的映射...
2. 联合主键:使用@Embeddable和@EmbeddedId注解处理复合主键。 3. 关联映射:包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)和多对多(ManyToMany)关系。 4. 集合映射:List、Set、Map等集合...
04 04Hibernate_Composite : 复合主键的使用,在开发中很少用到,一般良好的设计都会为一个表添加一个自动增长的主键标识列。其中重点配置方法和Hibernate中普遍采用的方法链编程的使用。还需注意可以将组合主键构建...
10. **其他高级特性**:包括双向关联的维护、集合的有序性和索引、复合主键的处理、子类继承的映射等。 《Hibernate 中文手册 3.5.2.pdf》、《Hibernate 中文手册 3.2.pdf》和《Hibernate 中文手册 3.1.2.pdf》分别...
`hb_02_component`和`hb_03_componentOid`、`hb_03_componentCollection`则涉及到了Hibernate的组件映射(Component Mapping)和复合主键(Composite Key)。组件映射允许将一个类的属性组合成另一个类的一部分,而...