一。mapping
这里使用两张表,分别为TBL_OSU_PRODUCTFILTERDETAIL_I和TBL_OSU_PRODUCTFILTER_I,前者为复合主键,后者与前者为一对多的关系。
1.TBL_OSU_PRODUCTFILTERDETAIL_I
<?xml version="1.0" encoding="utf-8"?>
<!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.netqin.function.osuproduct.filter.model.ProductFilterDeatil" table="TBL_OSU_PRODUCTFILTERDETAIL_I" schema="OSU_WORK">
<composite-id name="id" class="com.netqin.function.osuproduct.filter.model.ProductFilterDeatilId">
<key-many-to-one name="filter" entity-name="com.netqin.function.osuproduct.filter.model.ProductFilter" lazy="false">
<column name="PFDE_PRFIID_FK"></column>
</key-many-to-one>
<key-many-to-one name="product" entity-name="com.netqin.function.osuproduct.product.model.OsuProduct" lazy="false">
<column name="PFDE_PRDUID_FK"></column>
</key-many-to-one>
</composite-id>
<property name="pfdeOrder" type="java.lang.Long">
<column name="PFDE_ORDER" precision="10" scale="0" not-null="true" />
</property>
</class>
</hibernate-mapping>
说明:该表为复合主键,且每个字段与其它表为many-to-one关系,这样做方便在页面中直接使用关联对象,注意lazy="false"。
2.TBL_OSU_PRODUCTFILTER_I
<?xml version="1.0" encoding="utf-8"?>
<!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.netqin.function.osuproduct.filter.model.ProductFilter" table="TBL_OSU_PRODUCTFILTER_I" schema="OSU_WORK">
<id name="prfiId" type="java.lang.Long">
<column name="PRFI_ID" precision="10" scale="0" />
<generator class="sequence">
<param name="sequence">SEQ_OSU_PRODUCTFILTER_I</param>
</generator>
</id>
<property name="prfiBusiidFk" type="java.lang.String">
<column name="PRFI_BUSIID_FK" length="10" not-null="true" />
</property>
<set name="productFilterDetailes" cascade="all-delete-orphan" inverse="true" lazy="false">
<key column="PFDE_PRFIID_FK"/>
<one-to-many class="com.netqin.function.osuproduct.filter.model.ProductFilterDeatil"/>
</set>
</class>
</hibernate-mapping>
说明:这里说明即便是复合主键,也可以使用one-to-many只关联其中的一个字段。
二。操作方法
1.新增
ProductFilter pf = new ProductFilter();
pf.setPrfiBusiidFk(business[i]);
//筛选明细
for(int j=0;j<par.length;j++){
tem = par[j].split(",");//相应的子表属性,这里仅为举例
ProductFilterDeatil pfd = new ProductFilterDeatil();
ProductFilterDeatilId pfdfk = new ProductFilterDeatilId();//复合主键对象
OsuProduct product = (OsuProduct)dao.findById(OsuProduct.class, Long.parseLong(tem[0]));
pfdfk.setFilter(pf);
pfdfk.setProduct(product);
pfd.setId(pfdfk);//封装复合主键
pfd.setPfdeOrder(Long.parseLong(tem[2]));
pf.getProductFilterDetailes().add(pfd);
}
dao.save(pf );
2.修改和删除方法与many-to-one类似,不在赘述。
这里需要注意的是,复合主键是不能重复的,所以在新增或修改时需要做异常处理,或在前台做控制。
分享到:
相关推荐
**第四部分:Hibernate复合主键** 复合主键在数据库设计中并不罕见,当一个表的主键由两个或更多字段组成时,就需要使用。在Hibernate中,可以使用@EmbeddedId和@IdClass注解来处理复合主键。@EmbeddedId将一个包含...
《Hibernate ORM》是由李晓军等作者编著的...后续章节可能涵盖高级主题,如级联操作、多对多关系、继承映射、复合主键、查询优化等。通过不断学习和实践,开发者能够掌握Hibernate的精髓,提升开发效率,降低维护成本。
4. 复合主键配置:当一个实体的主键由多个属性组成时,可以使用复合主键。直接映射是在hbm.xml文件中直接定义各个属性,间接映射则是通过一个专门的类来表示复合主键,然后在实体类中引用该类。 5. Hibernate的映射...
13. **其他高级特性**:如级联操作、联合主键、复合主键、外键约束、乐观锁和悲观锁等。 综上所述,《Hibernate3 帮助文档 CHM》是Java开发者不可或缺的参考资料,无论你是初学者还是经验丰富的开发者,都可以从中...
此外,Hibernate还支持JPA(Java Persistence API)、实体继承、复合主键、查询结果转换为自定义类型等功能,极大地丰富了Java开发中的数据操作。 总之,“Hibernate3.6中文文档”提供了关于Hibernate 3.6的全面...
以下将详细解释四种主要的关联类型:复合主键、多对多、一对一和一对多。 1. **复合主键(JPACompositePK)** 在某些情况下,一个实体的主键可能由多个字段组成,这就需要使用复合主键。在JPA中,我们可以创建一个...
8. **高级特性**:涵盖查询优化、关联映射、继承映射、复合主键、级联操作、事件监听器、自定义类型等进阶主题。 9. **Hibernate与其他技术集成**:可能包括与Spring框架的整合,以及在Web应用中的使用,如Struts、...
5. **5复合主键映射和集合映射.ppt**:这部分可能涉及到如何处理复杂的主键结构,以及如何映射和操作集合类型的属性,如List、Set等。 6. **6数据关联.ppt**:讨论了如何在Hibernate中处理对象间的关联,包括外键...
3. 联合主键:对于复合主键,Hibernate提供了复合主键的处理方式。 4. 多对多关联:通过中间表实现两个实体之间的多对多关联。 九、最佳实践 1. 合理设计实体关系,避免深度嵌套的关联查询。 2. 使用预编译的SQL...
- 实体类的设计与映射,包括属性注解、继承、复合主键等。 - Session和Transaction的使用,事务的隔离级别与回滚规则。 - Criteria API和HQL的查询语法,以及SQL的自定义操作。 - 数据库关系映射,如一对一、一对多...
11. **复合主键与自定义主键生成策略** - 组合主键的定义和映射,使用@EmbeddedId和@IdClass。 - 自定义主键生成策略,如SequenceGenerator、TableGenerator等。 12. **事件监听与拦截器** - 实现Hibernate事件...
12. **复合主键**:Hibernate允许使用多个属性作为主键,可以通过复合键映射实现。 13. **Cascading(级联操作)**:级联操作允许一个对象的状态改变影响到其他关联对象,如删除一个父对象时,可以选择级联删除其子...
除了基础功能,Hibernate还支持多态性、继承映射、复合主键、延迟加载、双向一对多、多对多关系等复杂场景。此外,它也与其他技术如Spring Framework、MyBatis等有良好的整合性。 总的来说,《Hibernate中文参考...
10. **联合主键与复合主键**:在处理多字段主键时,需要理解如何在实体类和映射文件中配置联合主键或复合主键。 11. **实体继承策略**:Hibernate支持单表继承、联合继承和表-per-hierarchy等多种继承策略,根据...
7. **高级特性**:涵盖实体生命周期事件、复合主键、多态查询、动态模型和自定义类型等高级主题。 8. **最佳实践**:书中还提供了大量的最佳实践和陷阱避免指南,帮助开发者避免常见的错误和陷阱。 通过阅读《Java...
8. 复合主键(Composite Key): 当表使用多列作为主键时,需要创建一个专门的类来封装这些主键列,并在映射文件中使用`<composite-id>`标签定义。 9. 实践案例: - 一对多:报销与报销项。 - 多对多:订单与...
7. **高级特性**:包括实体继承、复合主键、查询缓存、级联操作、事件监听器、动态模型等,这些特性使Hibernate能应对复杂的企业级需求。 8. **JPA集成**:Java Persistence API(JPA)是Java EE的一部分,提供了一...
8. **一对多、多对一、一对一、多对多关系映射**: Hibernate支持各种复杂的关联关系映射,如集合类型的映射,如List、Set等,以及复合主键的处理。 9. **级联操作**: 可以设置级联属性,使得对父对象的操作能够影响...
13. **复合主键** 对于需要多个字段共同构成主键的情况,可以使用`@NaturalId`或`@EmbeddedId`进行映射。 14. **事件监听器** Hibernate允许自定义事件监听器,如`PreInsertEventListener`、`...
此外,教程还会涉及实体关系映射的高级主题,如一对一、一对多、多对一、多对多的关联映射,以及复合主键的处理。这些内容对于理解复杂的业务模型至关重要。同时,林信良还会讲解如何进行事务管理和异常处理,确保...