本文最初发布在
http://www.lovestblog.cn,转载请注明出处,谢谢合作。
最近在忙一个项目,使用的是Flex+Spring+Hibernate,期间碰到一个问题,有必要在此记录一下,也方便有相似问题的来者参考下
问题描述:有一个用户表和一个用户详情表,这两个表是一个一对一的单向关联关系,即在用户表中一个外键引用用户详情表,我在UserInfo的映射文件中使用的是many-to-one,设置了unique="true"表示一对一关系,设置了cascade="save-update"表示的是在保存useInfo对象的时候会自动保存与之关联的userDetails临时对象,即我希望的是先执行一个在用户详情表中的插入语句然后再执行一个在用户表中的插入语句,userInfo对象是从flex端传过来的,当然也设置了userDetails属性的值,在userInfo的dao文件中save方法是这样的
public IvUserInfo save(IvUserInfo transientInstance) {
log.debug("saving IvUserInfo instance");
try {
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
return transientInstance;
}
后面发现执行的sql语句只有一条插入语句,就是在用户表中的一个插入,由于外键的关联作用,是用户表的这条插入也无法执行,这就是问题所在了。
问题解决:这个问题我也没有具体研究Hibernate的源码,我先写了个测试类,发现仅仅在java中执行操作的话是可以正确执行两条插入语句的,但是通过flex传过来就有问题了,那说明是flex端传参数过来的问题,于是我试着修改UserInfo的save方法:
public IvUserInfo save(IvUserInfo transientInstance) {
log.debug("saving IvUserInfo instance");
try {
IvUserDetails ud=new IvUserDetails();
ud.setQq(transientInstance.getIvUserDetails().getQq());
transientInstance.setIvUserDetails(ud);
getHibernateTemplate().save(transientInstance);
log.debug("save successful");
} catch (RuntimeException re) {
log.error("save failed", re);
throw re;
}
return transientInstance;
}
这样一来问题解决了,顺利执行了两条插入语句。
如果朋友知道具体原因的话希望给我留言了,同时也希望该记录能帮助碰到此类问题的朋友。
分享到:
相关推荐
Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单 Ajax+struts+hibernate实现级联菜单
在Hibernate中,级联操作(Cascading Operations)是一种高级特性,它使得对象之间的关联关系在数据库层面得以同步更新。当我们对一个实体对象进行操作时,可以设置级联属性,让这些操作自动传播到与之相关联的其他...
在级联菜单中,可能涉及到多级分类的数据,如省份、城市、区县等,Hibernate可以通过实体类与数据库表进行映射,使得开发者无需编写大量的SQL语句,即可实现对数据库的增删查改操作。例如,当用户选择一个省份时,...
"Flex Tree + Checkbox级联勾选"是一个重要的功能点,通常出现在数据管理、配置界面或文件管理系统中,允许用户进行批量选择或级联操作。 首先,我们来详细了解一下Flex Tree。Flex Tree是基于Adobe Flex技术的一种...
3. **Spring**:Spring 是一个全面的企业级应用开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等特性,同时,Spring 与 Hibernate 集成良好,可以方便地管理事务和持久层操作。...
利用javascript+json实现级联查询
Haar-like + adaboost +级联 人脸检测算法代码,简洁的代码,已通过测试
综上所述,"ssh+dwr 3级联"是一个结合了安全的远程服务和实时Web交互的解决方案,它在三层架构的Web应用中具有广泛的应用价值。开发者需要掌握SSH和DWR的原理及使用方法,以便在项目中有效地实现这种技术组合。
在Web开发中,级联下拉列表是一种常见的交互方式,它允许用户在选择一个选项后,根据选择自动更新另一个下拉列表。在这个“ajax+struts2.0+jsp下拉列表级联”的示例中,我们将探讨如何利用这三个技术实现这种功能。 ...
Struts2是一个MVC(Model-View-Controller)框架,它主要用于处理用户请求、控制业务逻辑和展示视图,而Hibernate则是一个对象关系映射(ORM)框架,它简化了数据库操作,将Java对象与数据库表进行映射。 在这个...
在级联操作中,Hibernate可能被用来处理省市县和年月日的数据存取,通过HQL(Hibernate Query Language)或者Criteria API来执行SQL查询,获取级联选择的数据。 级联操作的核心在于数据间的关联,例如选择一个省后...
在IT领域,"asp+access 无限级联"是一个关于构建动态网站的常见技术组合,主要涉及Microsoft的Active Server Pages(ASP)技术和Access数据库。在这个实例中,我们可能看到的是如何利用ASP脚本语言(通常是VBScript...
在这个“SSH+JQuery+MySQL级联操作(省市县级联)”的案例中,我们将深入探讨如何利用这些技术实现一个省市县三级联动的效果。 首先,让我们了解什么是级联操作。级联操作通常指的是在一个选择发生变化时,相关的...
在Hibernate中,可以通过配置实现级联操作,比如保存部门时同时保存其关联的员工,或者删除部门时删除其下的所有员工。 综上所述,这个项目结合了四个强大的框架,构建了一个完整的、具备前后端交互能力的Web应用。...
在Java持久化框架Hibernate中,级联操作是处理对象关系映射(ORM)时非常重要的一个特性。级联操作允许我们在对一个实体进行操作时,自动地影响与之相关的其他实体,无需显式地处理这些关联。在这个" Hibernate级联...
JSON(JavaScript Object Notation)和Select元素在网页开发中经常被用来构建动态的、交互式的用户界面,特别是在处理级联下拉框时。级联下拉框是指一个下拉框的选择会影响另一个下拉框的选项,这样的设计可以提高...
它们分别负责不同的职责:Spring作为应用上下文和依赖注入框架,Struts处理MVC模式中的视图与控制层,而Hibernate则是对象关系映射(ORM)框架,简化了数据库操作。在"spring+structs+hibernate 框架的整合demo"中,...
在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...
Hibernate则解决了传统Java应用中繁琐的JDBC操作,通过映射Java对象到数据库表,使得开发者可以像操作普通对象一样操作数据。它支持实体类的CRUD(Create、Read、Update、Delete)操作,自动处理SQL语句的生成和执行...