`
yoyoroc
  • 浏览: 1235 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

Hibernate 级联保存失败,Hibernate defect

阅读更多
使用annotation方式标注Payment和PaymentEntry. ID都是用自己设定策略assigned。
@Entity
@Table(name = "LO_CONF_PAYMENT")
public class PaymentBillDO implements Serializable{
	

	@Transient
	private static final long serialVersionUID = 206001219164196538L;
	
	
	@Id
	@Column(name = "ID", length = 50)
	@GeneratedValue(generator = "c-assigned")
	@GenericGenerator(name = "c-assigned", strategy = "assigned")
	private String ID;

 	@OneToMany(mappedBy ="parent",
			targetEntity = PaymentBillEntryDO.class, fetch = FetchType.LAZY)
	@Cascade({ CascadeType.ALL})
	private List<PaymentBillEntryDO> Entries;
}


@Entity
@Table(name = "LO_CONF_PAYMENTENTRY")
public class PaymentBillEntryDO implements Serializable {

	private static final long serialVersionUID = 6913338048891980882L;

	@Id
	@Column(name = "ID", length = 50)
	@GeneratedValue(generator = "c-assigned")
	@GenericGenerator(name = "c-assigned", strategy = "assigned")	
	private Long ID;
	
	@ManyToOne( targetEntity = PaymentBillDO.class, fetch = FetchType.EAGER)
	@JoinColumn(name = "PARENT_ID", nullable = false)
	@Cascade({ CascadeType.REFRESH })
	private PaymentBillDO  parent;


无论怎么测试,都不能级联保存。
搜索了无数网页,中文的,英文都,都没有解。搜到过一点点有用的资料,就是把@Cascade有JPA的annotaion换成Hibernate的annotaion。其他的各种sample都只是对hibernate reference的抄袭而已。
于是只能debug hibernate。在类DelegatingStatement的executeBatch方法中居然发现了对entry的cascade update语句,而不是想象中的Insert语句。想了一下,难道hibernate如果发现entry 有ID的话,就判断对entry进行级联update,而不是进行insert。 后来把ID生成策略换成了SEQUENCE,解决问题。

崩溃啊。
新的Entry的annotation为

@Entity
@Table(name = "LO_CONF_PAYMENTENTRY")
public class PaymentBillEntryDO implements Serializable {

	private static final long serialVersionUID = 6913338048891980882L;

	@Id
	@Column(name = "ID", length = 50)
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "paymentbillEntry_seq")
      @SequenceGenerator(name = "paymentbillEntry_seq", sequenceName = "SEQ_LO_CONF_PAYMENT_ENTRY")	
	private Long ID;
	
	@ManyToOne( targetEntity = ElementEventRelationshipDO.class, fetch = FetchType.EAGER)
	@JoinColumn(name = "PARENT_ID", nullable = false)
	@Cascade({ CascadeType.REFRESH })
	private PaymentBillDO  parent;


  希望大家出现这个问题的时候,搜到的答案不仅仅是copy reference而已。
分享到:
评论
2 楼 yoyoroc 2011-04-03  
getHibernateTemplate().save();
1 楼 humaeks 2011-04-03  
弱弱的问下你保存调用的是哪个API?

相关推荐

    hibernate many-to-many级联保存,级联更新,级联删除

    本文将深入探讨如何在Hibernate中处理Many-to-Many关系的级联保存、级联更新和级联删除。 一、Many-to-Many关系基础 在数据库设计中,Many-to-Many关系意味着两个实体之间存在多对多的关系。例如,学生可以选修多门...

    hibernate 级联查询

    Hibernate提供了级联操作来简化数据的保存、更新和删除等操作,使得开发者无需手动编写复杂的SQL语句,就能实现关联对象的联动处理。 **描述分析:** 虽然描述部分为空,但根据给定的博文链接,我们可以推测文章...

    Hibernate的级联操作(增,删,该)

    当设置为`CascadeType.ALL`或`CascadeType.PERSIST`时,如果在父实体中创建了一个新的子实体,并且这个子实体还没有被持久化到数据库,那么在保存父实体时,Hibernate会自动将子实体一并保存。例如,在一对多关系中...

    Hibernate级联操作一对多demo

    - 当我们通过Hibernate的Session对象保存或更新父类实体时,配置了级联操作的子类实体也会被相应地处理。 - 删除操作同样如此,如果设置了`CascadeType.REMOVE`,删除父实体时,其关联的子实体会被一同删除。 4. ...

    hibernate级联增删改查

    在处理一对多、多对一等关联关系时,Hibernate提供了级联操作功能,使得对主表的增删改查能够自动影响到关联的从表。本主题将深入探讨"hibernate级联增删改查",特别是针对"t_card主表"和"t_person从表"的关系。 ...

    hibernate 级联(cascade和inverse)一对多

    在Java的持久化框架Hibernate中,级联操作(Cascade)和反转(Inverse)是两个重要的概念,它们主要用于管理对象关系模型中的关联关系。在一对多的关系中,这些特性可以帮助简化数据操作,提高代码的可读性和维护性...

    3.3、Hibernate级联关系(Av839011656,P3).mp4

    3.3、Hibernate级联关系(Av839011656,P3).mp4

    Hibernate级联操作.docx

    在 Hibernate 中,级联操作(Cascade)和反向属性(Inverse)是管理对象关系的重要概念,特别是在处理一对多(One-to-Many)或多对一(Many-to-One)关系时。 **级联操作(Cascade)** 级联操作定义了当主对象被...

    Hibernate的缓存级联查询

    一级缓存是基于Session的,它保存了自Session打开以来所有操作的对象状态,减少了对数据库的直接访问。Session提供`evict`和`clear`方法来管理缓存内容。二级缓存则基于SessionFactory,能在进程甚至集群间共享数据...

    Hibernate_级联关系说明_-_关于cascade和inverse的用法

    在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...

    关于Hibernate级联删除的问题.doc

    在Java的持久化框架Hibernate中,级联操作是一种非常实用的功能,它允许我们在对一个对象进行操作时,自动处理与其关联的对象。级联删除(Cascade Delete)就是其中之一,当删除一个对象时,会根据配置自动删除与之...

    Hibernate 一对多、多对一、级联、加载、反转

    3. **级联操作**:级联是指当对一个实体进行某些操作(如保存、删除)时,这些操作会自动传播到与其关联的其他实体。例如,如果我们设置级联类型为`CascadeType.ALL`,那么删除一个用户时,与之关联的所有订单也会被...

    第七章_Hibernate_-_级联策略

    第七章_Hibernate_-_级联策略 第七章

    用hibernate做的省市县三级级联,

    总的来说,这个项目展示了如何使用Hibernate、Ajax和DWR来实现一个高效、用户友好的省市县三级级联选择功能。开发过程中涉及了ORM、MVC架构、数据库操作以及前端交互等多个方面,是学习和实践Web开发技能的好实例。

    Ajax+struts+hibernate实现级联菜单

    Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单

    普元 datacell级联保存

    普元 datacell级联保存 企业名称"&gt; 项目负责人" &gt; 企业类别"&gt; ();"/&gt; 资质等级" &gt; (this)" &gt; &lt;/r:datacell&gt;

    Hibernate cascade (级联).doc

    ### Hibernate级联(Cascade)详解 #### 一、概述 Hibernate 是一款强大的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象模型映射到数据库表,从而极大地简化了数据访问层的开发工作。在 Hibernate 中,...

    hibernate_second2项目源码

    【hibernate_second2项目源码】是一个基于Hibernate框架的示例项目,它在前一个项目的基础上进行了扩展,特别引入了级联保存的功能。在这个项目中,我们将深入探讨Hibernate的级联操作,以及如何实现数据的级联保存...

    hibernate3.2的级联关系_JavaProject

    级联关系在Hibernate中是指当一个实体发生某种操作(如保存、更新、删除)时,是否会影响到与之相关联的其他实体。通过配置级联关系,我们可以控制这些关联实体的行为。 1. **一对多(OneToMany)**:在数据库中,...

Global site tag (gtag.js) - Google Analytics