http://topic.csdn.net/u/20090722/16/1946dd91-3900-47e9-ab85-ed7db41252de.html

Object obj=session.merge(entry.getClass().getName(), entry);
entry 中的主键都是有值的,但是obj中的主键都是null,且数据库中也是空值
一头雾水啊。主键是复合主键, 单表,没有关联关系。
我用的hibernate 是3.0
现在发现规律,如果 entry是全新的,merge就会出现 主键被清空的问题。
如果session缓存中,有和entry相同主键的对象存在,merge就正常。
难道是我对merge的理解有问题,必须是session中有同主键的对象存在时,才能使用merge,否则应该使用saveOrUpdate????????????????
merge跟update其实一个效果,只是名字不同罢了.
merge是jpa中的方法,大概是hibernate要跟jpa接轨,
才出的这个方法
save---persist
=======================================================================================
http://iblike.iteye.com/blog/795721
复合(联合)主键映射

通常将复合主键相关的属性,单独放到一个类中
 * 此类必须实现序列化接口
 * 覆写hashcode和equals方法

===========================================================================================
http://fei-6666.iteye.com/blog/446012
昨天使用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()--脱管状态时候调用,状态不变

hibernate 联合主键 merge相关推荐

  1. hibernate联合主键

    2019独角兽企业重金招聘Python工程师标准>>> 在日常开发中,有时候会出现要求两个或以上字段联合做主键的表,就两个字段做主键为例,用户表的联合主键为firstname和las ...

  2. 自底向上带你逆向解析hibernate联合主键

    参考1.参考2 文章目录 1 最后生成具有复合主键的表 2 People.hbm.xml文件 3 配置映射 4 java类 5 action中联合主键赋值方式 1 最后生成具有复合主键的表 数据库表的 ...

  3. hibernate 联合主键

    xml方式处理联合主键: 以有两个主键:id和name的student表为例. 先创建个主键类: package com.bjsxt.hibernate; //黑色为必写项 public class ...

  4. hibernate ——联合主键

    接上一篇博客:http://www.cnblogs.com/tengpan-cn/p/5551323.html 主键类不需要写任何注解,表对象类使用@IdClass注解 在表对象类前面加@IdClas ...

  5. hibernate联合主键 注解方式

    转载自https://my.oschina.net/yotoo/blog/265571 方法一:主键类用@Embeddable,pojo类仍然用@Entity但是引用主键类的对象用@Id 主键pojo ...

  6. java 联合主键 注解_Hibernate的联合主键注解方式

    Hibernate联合主键注解方式,即是Hibernate中某一张表出现多个字段联合为唯一主键的情况.这时候就可以使用Hibernate的联合主键来操作.以用户表为例子,userId+userName ...

  7. oracle联合主键去重,联合主键的查询语句怎么写

    1.联合主键,SQL语句怎么写 建立主键有两种方法:一种是在数据库提供的GUI环境中建立,另一种是通过SQL语句执行建立,下面分别介绍. 1.在数据库提供的GUI环境中建立(以SQL7为例). 输入表 ...

  8. Hibernate中用到联合主键的使用方法,为何要序列化,为何要重写hashcode 和 equals 方法...

    联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为 ...

  9. Hibernate JPA-实体类定义联合主键@IdClass、@EmbeddedId注解

    文章目录 一.复合主键@idClass.@Embeddable @idClass @Embeddable 网上实例demo 二.参考 一.复合主键@idClass.@Embeddable 可参照官方文 ...

最新文章

  1. 因女朋友的一个建议,这位程序员创立仅 551 天公司就被 10 亿美元收购了
  2. 回收 PV - 每天5分钟玩转 Docker 容器技术(152)
  3. 01_SMC_Calling_Convention(SMCCC)
  4. jar包和war包差别
  5. 请问python语言的语法特点_Python3笔记004- 2.1 python的语法特点
  6. AAAI2021年,录用了165篇图神经网络相关论文,图网络究竟在研究什么?
  7. 4. Linux 高性能服务器编程 --- TCP/IP 通信
  8. visio2013画图时两条直线交叉, 如何让它不弯曲
  9. 慧翔PMP培训及感想
  10. DLang 编译实验
  11. UML图学习之五 序列图(顺序图)和协作图
  12. 埃睿迪展台热度持续 为绿色城市建设进言献策
  13. CRM客户关系管理:赢得和留住客户的指南
  14. 浅谈程序环境和预处理
  15. ASPICE系列:顺利通过ASPICE流程软件单元验证(SWE.4)
  16. Android 面向切面编程(AOP)
  17. Arduino读取GPS模块
  18. OFD[2]-第二章 期货市场和期货合约套期保值应用
  19. 人工智能实验:蚁群算法求解TSP问题(Python代码实现,附有详细实验报告地址)
  20. 毕业设计----多功能电子词典的设计与实现效果展示

热门文章

  1. 10.1.4 HTML练习题
  2. 11.2.4 jQuery动画
  3. 2019第十届蓝桥杯C/C++ A组省赛 —— 第二题: 数列求值
  4. 【MFC】类的层次结构图
  5. 【STM32】FreeRTOS简介
  6. 【Android】Android中WIFI开发总结(一)
  7. 计算机文化基础在线作业答案,中国石油大学17年秋《计算机文化基础》第一次在线作业答案...
  8. oracle10_client的安装,Oracle10.2ClientWindows安装.doc
  9. 杭电oj java printf_杭电oj1042题大数,java,百思不得其解为何WA,求指教
  10. python写的一个贴吧爬虫_Python-简单百度贴吧爬虫