`
fei_6666
  • 浏览: 207544 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate 联合主键类无法批量保存到数据库的问题

阅读更多
昨天使用hibernate循环批量保存一个联合主键类报出如下错误:
AbstractFlushingEventListener[line:301}: Could not synchronize database state with session
Could not execute JDBC batch update

联合主键类配置如下:
<hibernate-mapping>
    <class name="com.vcmchina.credithour.model.SzGcEvaResult" table="sz_gc_eva_result" >
        <composite-id name="id" class="com.vcmchina.credithour.model.SzGcEvaResultId">
            <key-property name="stuNo" type="java.lang.String">
                <column name="stu_no" length="20" />
            </key-property>
            <key-property name="projectCode" type="java.lang.String">
                <column name="project_code" length="20" />
            </key-property>
            <key-property name="weekNo" type="java.lang.Integer">
                <column name="week_no" />
            </key-property>
            <key-property name="syCode" type="java.lang.String">
                <column name="sy_code" length="20" />
            </key-property>
            <key-property name="semSection" type="java.lang.String">
                <column name="sem_section" length="10" />
            </key-property>
            <key-property name="suNo" type="java.lang.String">
                <column name="su_no" length="20" />
            </key-property>
            <key-property name="semNo" type="java.lang.String">
                <column name="sem_no" length="20" />
            </key-property>
        </composite-id>
        <property name="secType" type="java.lang.String">
            <column name="sec_type" length="10" not-null="true" />
        </property>
        <property name="graType" type="java.lang.String">
            <column name="gra_type" length="10" not-null="true" />
        </property>
        <property name="semFlag" type="java.lang.String">
            <column name="sem_flag" length="10" not-null="true" />
        </property>
        <property name="evaScore" type="java.lang.Integer">
            <column name="eva_score" not-null="true" />
        </property>
        <property name="recordData" type="java.lang.String">
            <column name="record_data" length="30" not-null="true" />
        </property>
        <property name="empName" type="java.lang.String">
            <column name="emp_name" length="50" not-null="true" />
        </property>
    </class>
</hibernate-mapping>

////////////////////////////////////////////////

开始采用的是
public void addSzGcEvaResult(SzGcEvaResult evaResult) {
// TODO Auto-generated method stub
this.getHibernateTemplate().save(evaResult);
}

后来改用merge方法就没有问题了:
public void addSzGcEvaResult(SzGcEvaResult evaResult) {
// TODO Auto-generated method stub
this.getHibernateTemplate().merge(evaResult);
}

我感觉是对象状态的问题,因为我给对象实例化了联合主键,hibernate 认为它不再是瞬态,而是托管状态。
save() --瞬态状态调用,状态变为持久(POJO)
merge()--脱管状态时候调用,状态不变
0
0
分享到:
评论

相关推荐

    Hibernate官方中文参考手册下载

    - **创建(CREATE)**:使用`Session.save()`或`Session.persist()`方法将对象保存到数据库。 - **读取(READ)**:`Session.get()`或`Session.load()`用于根据主键获取对象,`Query`和`Criteria`接口提供了更复杂的查询...

    Hibernate hibernate

    2. 联合主键:支持多个字段构成的复合主键。 3. 异步操作:利用Hibernate的异步API,提高系统响应速度。 4. 数据库分页:Query对象提供了分页查询的功能。 5. 动态模型:允许在运行时动态构建查询,增强了灵活性。 ...

    Hibernate 用法实例

    它通过映射Java类到数据库表,使得开发人员可以专注于业务逻辑,而无需过多地关注SQL的编写。 ### 二、Hibernate 架构 Hibernate 包含了多个组件,如 Configuration、SessionFactory、Session、Query 等。理解这些...

    hibernate教材

    Hibernate 支持类的继承映射,可以将继承层次结构映射到数据库的单表或多表。具体有三种策略:单表继承(Single Table Inheritance)、联合继承( Joined Table Inheritance)和表-per-class-hierarchy(Table per ...

    Hibernate课程的总结

    2. 联合主键:处理多个字段作为主键的情况。 3. 批量操作:`session.saveOrUpdateAll()`、`session.deleteAll()`等。 4. 分页查询:使用`FirstResult`和`MaxResults`限制返回结果数量。 **九、最佳实践** 1. 避免...

    hibernate4

    7. 提交事务:所有操作完成后,提交事务以保存到数据库。 8. 关闭资源:最后,关闭Session和SessionFactory以释放资源。 四、高级特性 1. 异步查询:使用Future或AsyncQuery,实现查询操作的异步化,提升应用响应...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     3.4.2 把Customer持久化类映射到CUSTOMERS表  3.5 通过Hibernate API操纵数据库  3.5.1 Hibernate的初始化  3.5.2 访问Hibernate的Session接口  3.6 运行helloapp应用  3.6.1 创建运行本书范例的系统环境  ...

    Hibernate

    11. **继承映射(Inheritance Mapping)**:Hibernate支持单表继承、联合继承和表格 per 类型的继承策略,使对象模型的继承结构能够映射到数据库中。 12. **懒加载(Lazy Loading)**:这是一种优化策略,允许延迟...

    Hibernate_教程

    持久化类(Persistent Classes)是指那些被Hibernate管理的Java对象,它们通过Hibernate映射到数据库表。一个简单的持久化类示例可以是一个POJO(Plain Old Java Object),其中包含基本的数据成员和业务逻辑。为了...

    hibernate的jar包和教程N多本

    9. 批量操作:Hibernate提供了批处理功能,如`batch_size`属性用于控制批量保存或更新的大小,以及`StatelessSession`用于高效的大规模数据处理。 10. 性能优化:包括延迟加载(Lazy Loading)、缓存策略调整、...

    hibernate经典源码

    10. **联合主键与复合主键**:在处理多字段主键时,需要理解如何在实体类和映射文件中配置联合主键或复合主键。 11. **实体继承策略**:Hibernate支持单表继承、联合继承和表-per-hierarchy等多种继承策略,根据...

    Hibernate实战(第2版 中文高清版)

    第一部分 从Hibernate和EJB 3.0开始  第1章 理解对象/关系持久化   1.1 什么是持久化   1.1.1 关系数据库   1.1.2 理解SQL   1.1.3 在Java中使用SQL   1.1.4 面向对象应用程序中的持久化   1.2 范式不...

    hibernate 调优

    2. **避免使用联合主键**:联合主键虽然可以满足某些特定的需求,但往往会增加查询复杂度,尤其是在使用外键的情况下。如果可能,尽量使用单一字段作为主键。 3. **ID 生成机制**:不同的数据库有不同的 ID 生成...

    马士兵hibernate学习笔记

    - **联合主键**:当实体类拥有多个主键时,需要特别配置联合主键策略。 #### 六、Hibernate 核心开发接口 - **项目**: `hibernate_0500_CoreAPI` - **API 文档**:建议查阅官方文档获取最新信息。 - **接口介绍**:...

    hibernate-biji

    Hibernate的批处理功能可以提高性能,例如,通过`Session.saveOrUpdateAll()`方法批量保存实体,或使用`Query.setFetchSize()`设置查询结果集大小。 以上就是“hibernate-biji”中涉及的一些关键知识点。通过学习...

    hibernate性能优化方案

    2. **避免使用联合主键**:联合主键虽然有助于确保唯一性,但在实际使用过程中会增加维护成本,并可能导致查询性能下降。 3. **ID生成机制的选择**:不同数据库提供的ID生成策略各异,例如序列、触发器、GUID等,...

    Hibernate PPT

    向 OrderLine 的引用都应该通过 Order 实体来完成,因为 OrderLine 没有自己的标识符,它的唯一性由 Order 的联合主键决定。1.3 继承映射Hibernate 支持单表继承(Single Table Inheritance)、联合继承( Joined ...

    Hibernate高级特性

    Hibernate支持批处理操作,如批量保存、更新和删除,以减少数据库交互次数,提升性能。 11. **查询优化** Hibernate提供了SQL的批注生成,允许开发者手动优化生成的SQL,以适应特定的数据库环境。此外,优化HQL和...

    hibernate 总结

    组件映射允许将Java对象的字段或属性映射到数据库中的复合类型或联合主键。文档讲解了依赖对象、动态组件以及组件作为Map的索引或联合标识符的映射方法,提高了代码的可读性和维护性。 ### 继承映射 继承映射策略...

    hiber开发指南 hibernate高级特性

    Hibernate支持设置批处理大小,通过`Session.flush()`方法强制刷新缓存中的操作,批量提交到数据库。 8. **级联操作** 级联操作允许在一个实体的操作中自动处理其关联的实体。例如,`CascadeType.ALL`将使保存、...

Global site tag (gtag.js) - Google Analytics