Spring+Hibernate数据保存问题

Spring MVC的优势我就不多说了,在使用Spring MVC的时候要比Struts2舒服多了,至于持久层也还是比较倾向于Hibernate,于是开始试着用Spring+hibernate搭一个简易的权限控制系统(前端用的jQuery-easyUI)。

背景交代完毕,开始说需求:在新增用户的时候需要给用户绑定一个组织机构,一个或者多个角色,在设计User这个Bean的时候自然就是:

public class User{
    private int id;
    private String name;
    private String account;
    private String password;
    private int age;
    private Date createDate;
    private Gender sex;
    private Set<Role> roles;
    private Enable enable;
    private Organization organization;
}

可是页面在传值的时候一般在传递Organization这个值的时候一般都是传递ID过来,而roles也一般是传递多个ID值到后台,那么自然数据转换就成了一个大问题!(表现在页面上便是400. .....没耐心看吐槽的童鞋请直接跳到最后一段。。

为了解决这个问题,找了几个别人写的小Demo,其中有个别网友还上传了可能是他们公司正在用的系统,可是在阅读代码的时候发现他们都喜欢用同一种我并不怎么喜欢的方法:定义两个Bean,一个用来接收前台数据,一个用来与后台存储关联hibernate。也就是说,一个User类变成了前面我所写的用来关联后台存储,还有一个新的User类:

public class User{
    private int id;
    private String name;
    private String account;
    private String password;
    private int age;
    private Date createDate;
    private Gender sex;
    private String roles;
    private Enable enable;
    private Stringorganization;
}

然后再在存储之前将两个类相互转换一下,且不说这种方法是否可行,但是我是个懒人,如果要我每个涉及到关联表的地方都像这样写两个类,然后再增加转换方法我宁愿放弃这个框架。事实上我也确实有考虑过其他框架,比如mybatis,但是了解了一下Mybatis这个框架之后发现Hibernate对于我来说有个致命的诱惑:BaseDao<T>的写法。用Mybatis也许可以传值的问题,但是一想到要每个Bean都写一个Dao类,还是果断放弃!至少在没有更多需求之前,还不打算更换Hibernate。

于是问题回来了框架的选择必须得是Spring+Hibernate,那么久必须解决这个传值的问题,当时差点被采纳的方案是将organization和roles单独做两个字段重新传值,然后后台在接收到之后自行处理,并给User赋值,这个方法确实可以偷不少的懒,已经基本够用了,可是这样一来代码就变得很是别扭,明明一个Form里面的字段,非要拆成多个字段来接收,没办法,还是不能忍(请原谅我的瞎折腾)。

到这里差不多把我的思路经历讲的差不多了,当然我只挑了一部分说出来,其他无厘头的想法就不提了,该说出最后的解决方法了,当然如果看完前面那些思路的人再来看解决方案肯定会喷我。。。

解决方法就是:给Role和Organization这两个类加一个只带ID一个参数的构造器(没试过全参构造器,谁试完可以告知一声,我已经懒得试了),然后问题就OK了,解决了。。当然需要注意的一点是不论是Role还是Organization都不要给CascadeType加上update这个属性,否则你会很伤心。。。

时间: 2024-08-06 20:07:21

Spring+Hibernate数据保存问题的相关文章

Hibernate数据保存操作方法的原理对比

Interface Session All Superinterfaces: Serializable All Known Subinterfaces: EventSource, Session All Known Implementing Classes: SessionImpl public interface Session  extends Serializable Java应用程序与Hibernate之间的主要运行时接口.它是抽象了持久化服务概念的核心抽象API类. Session的生

zbb20170928 spring hibernate mysql 保存数据时自动生成 主键 设置

@Id    @GeneratedValue    @Column(name = "id", unique = true, nullable = false)    public Integer getId() {        return this.id;    }

用Maven整合SpringMVC+Spring+Hibernate 框架,实现简单的插入数据库数据功能(二)

前一篇写的有些多,大家先看前一篇,传送门 具体的资源已将上传到资源了. 附地址:MySQL.zip启动 用Maven整合SpringMVC+Spring+Hibernate 框架 上文我们直接搭建前的准备和资源配置都写好了,下面进入具体代码编写.承接上文的小3 3.我习惯建立接口,这样对整个项目感觉更合理. (1.)建立IBaseService(业务逻辑层,有的习惯写成BaseServiceI)都可以,都是标注接口的,我只是简单的贴下代码 package com.jesus.sshframewo

atitit.spring hibernate的事务机制 spring不能保存对象的解决

atitit.spring hibernate的事务机制 spring不能保存对象的解决 sessionFactory.openSession() 不能. . log黑头马sql语言.. sessionFactory.getCurrentSession().update(user); 中间走ok兰..log黑头也有累.. 在Spring中使用Hibernate.假设我们配置了TransactionManager.那么我们就不应该调用SessionFactory的openSession()来获得S

Hibernate深入浅出(九)持久层操作——数据保存&amp;批量操作

数据保存: 1)session.save session.save方法用于实体对象到数据库的持久化操作.也就是说,session.save方法调用与实体对象所匹配的Insert SQL,将数据插入库表. 结合一个简单实例来进行讨论: 1 2 3 4 5 TUser user = new TUser(); user.setName("Luna"); Transaction tx = session.beginTransaction(); session.save(user); tx.co

spring mvc+spring + hibernate 整合(三)

前面我们已整合了spring + hibernate,并建立了个用户的增加的实例,通过了单元测试,能正常增加数据.今天我们就来集成spring mvc以便建立web界面来输入数据并提交,后台再保存入库.关于spring mvc的一些基础理论及使用方法,网上有很多的资料,我这里就不多说了,下面我们进入实战.     因为我们项目会用到很多的图片.js代码.css样式文件等.我们在webapp目录下建立个static目录,统一对这些文件进行管理 一:web.xml配置 它提供了我们应用程序的配置设定

spring mvc+spring + hibernate 整合(二)

在上篇文章中,我建立了工程并配置了spring + hibernate.今天我们检验下上篇文章的成果,如何检查呢?那就是进行单元测试.本篇文章就让大家和我一起来就前面的建的工程进行单元测试.     本项目使用Junit进行单元测试,需要引用单元测试的包,在的工程建立中已有了如何引入单元测试的依赖,这里就不多说了.要进行单元单元测试,我们就按下面的步骤进行 一:建立实体 本例是刚弄开始学习,所以表不弄得太复杂,我们就以用户登录为例:建立一个用户对象,拥有用户名和密码两个属性,密码开始也使用名文的

struts+spring+hibernate总结

简单的说: struts 控制用的 hibernate 操作数据库的 spring 用解耦的 详细的说: struts 在 ssh 框架中起控制的作用 , 其核心是 Controller, 即 ActionServlet, 而 ActionServlet 的核心就是 struts-config.xml. 主要控制逻辑关系的处理 . hibernate 是数据持久化层 , 是一种新的对象.关系的映射工具 , 提供了从 Java 类到数据表的映射,也提供了数据查询和恢复等机制 , 大大减少数据访问的

Struts 2 Spring Hibernate三大框架的执行流程以及原理

转:http://www.cnblogs.com/System-out-println/p/5974113.html Struts2框架 一.简介 Struts2是一个相当强大的Java Web开源框架,是一个基于POJO的Action的MVC Web框架.它基于当年的WebWork和XWork框架,继承其优点,同时做了相当的改进. 1.Struts2基于MVC架构,框架结构清晰,开发流程一目了然,开发人员可以很好的掌控开发的过程. 2.使用OGNL进行参数传递.OGNL提供了在Struts2里