package com.h3c.zgc.user.entity;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="t_person",catalog="itac")
public class Person {
    @Id
    @GenericGenerator(name="generator",strategy="increment")
    @GeneratedValue(generator="generator")
    @Column(name="person_id",unique=true,nullable=false)
    private Integer personId;
    @Column(name="person_name")
    private String personName;

    @OneToMany(targetEntity=House.class)
    @JoinColumn(name="person_id",updatable =false)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Set<House> houses = new HashSet<House>();

    public Set<House> getHouses() {
        return houses;
    }
    public void setHouses(Set<House> houses) {
        this.houses = houses;
    }
    public Integer getPersonId() {
        return personId;
    }
    public void setPersonId(Integer personId) {
        this.personId = personId;
    }
    public String getPersonName() {
        return personName;
    }
    public void setPersonName(String personName) {
        this.personName = personName;
    }
    @Override
    public String toString() {
        return "Person [personId=" + personId + ", personName=" + personName
                + ", houses=" + houses + "]";
    }

}
package com.h3c.zgc.user.entity;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.GenericGenerator;

@Entity
@Table(name="t_house",catalog="itac")
public class House {
    @Id
    @GeneratedValue(generator="generator")
    @GenericGenerator(name="generator",strategy="increment")
    @Column(name="house_id",unique=true,nullable=false)
    private Integer houserId;
    @Column(name="house_address")
    private String houseAddress;

    @ManyToOne(targetEntity=Person.class)
    @JoinColumn(name="person_id",updatable=false)
    @Cascade(CascadeType.SAVE_UPDATE)
    private Person person;

    public Person getPerson() {
        return person;
    }
    public void setPerson(Person person) {
        this.person = person;
    }
    public Integer getHouserId() {
        return houserId;
    }
    public void setHouserId(Integer houserId) {
        this.houserId = houserId;
    }
    public String getHouseAddress() {
        return houseAddress;
    }
    public void setHouseAddress(String houseAddress) {
        this.houseAddress = houseAddress;
    }
    @Override
    public String toString() {
        return "House [houserId=" + houserId + ", houseAddress=" + houseAddress
                + "]";
    }
}

dao

package com.h3c.zgc.user.dao;

import java.util.HashSet;
import java.util.Set;

import javax.annotation.Resource;

import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate4.support.HibernateDaoSupport;
import org.springframework.stereotype.Repository;

import com.h3c.zgc.user.entity.House;
import com.h3c.zgc.user.entity.Person;

@Repository
public class PersonDao extends HibernateDaoSupport{
    @Resource
    private void set(SessionFactory sessionFactory){
        this.setSessionFactory(sessionFactory);
    }
    public void savePerson(){
        Person p = new Person();
        p.setPersonName("person01");
        this.getHibernateTemplate().save(p);
    }
    public void savePersonAndHouse(){
        Person p = new Person();
        p.setPersonName("person01");

        House h = new House();
        h.setHouseAddress("beijing");

        Set<House> hs = new HashSet<House>();
        hs.add(h);

        //建立关系
        p.setHouses(hs);
        h.setPerson(p);
        this.getHibernateTemplate().save(p);
        System.out.println(p);
    }
}

service

package com.h3c.zgc.user.service;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.h3c.zgc.user.dao.PersonDao;
@Service
public class PersonService {
    @Resource
    private PersonDao personDao;
    @Transactional
    public void savePerson() {
        this.personDao.savePerson();
    }
    @Transactional
    public void savePersonAndHouse() {
        this.personDao.savePersonAndHouse();
    }
}

controller

package com.h3c.zgc.user.controller;

import java.io.IOException;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.h3c.zgc.user.service.PersonService;
@Controller
public class PersonController {
    @Resource
    private PersonService personService;
    @RequestMapping("savePerson")
    public String savePerson(HttpServletRequest request){
        this.personService.savePerson();
        request.setAttribute("flag", "success");
        return "h4/flag";
    }
    @RequestMapping("savePersonHouse")
    public String savePersonHouse(HttpServletRequest request){
        this.personService.savePersonAndHouse();
        request.setAttribute("flag", "success");
        return "h4/flag";
    }

    @RequestMapping("test0")
    public void test(HttpServletResponse response) throws IOException{
        String strs = "[{ title: '中国好声音'},{ title: '中国饮料'},{ title: '中国好舞蹈'}]";
        response.getWriter().write(strs);
    }
}

访问路径

http://localhost:8080/zgc/savePersonHouse

springmvc4+hibernate4+spring4注解一对多级联保存的更多相关文章

  1. hibernate 一对多 级联 保存修改 删除

    一对多,一端设置: <set name="TWorkorderHistories" inverse="true" cascade="all&qu ...

  2. 【JPA 级联保存/级联删除】@OneToMany (双向) 一对多【转】

    [http://blog.sina.com.cn/s/blog_625d79410101dbdd.html]   看过前两篇帮助文档 [JPA] @OneToOne 单向 和 [JPA]@OneToO ...

  3. Hibernate中表与表之间的关联一对多,级联保存和级联删除

    1:Hibernate的一对多操作(重点) 一对多映射配置 第一步:创建两个实体类:客户和联系人(例)以客户为一,联系人为多: package com.yinfu.entity; public cla ...

  4. 【j2ee spring】30、巴巴荆楚网-综合hibernate4+spring4(5)分页

    巴巴荆楚网-综合hibernate4+spring4(5)分页 1.图文项目 2.首先我们引入对应的jar包 3.我们配置一下数据库中对应的实体对象 ProductType.java /** * 功能 ...

  5. 再谈Hibernate级联删除——JPA下的Hibernate实现一对多级联删除CascadeType.DELETE_ORPHAN

    声明: 1.本文系原创,非抄袭或转载过来的. 2.本文论点都亲手做过实验论证. 3.本文所讲的Hibernate配置都基于注解的方式,hbm语法未提供. 非常多人对持久层概念搞不清JPA.Hibern ...

  6. 【j2ee spring】27、巴巴荆楚网-整合hibernate4+spring4(2)

    巴巴荆楚网-整合hibernate4+spring4(2) 1.图文项目 2.首先我们引入对应的jar包 这里用的是oracle 11g,所以我们使用的数据库连接jar包是ojdbc6, 的区别就是支 ...

  7. Hibernate学习(三)一对多数据的保存

    保存习惯代码 @Test public void saveTwoTableTest(){ Transaction transaction = null; try { transaction = ses ...

  8. Hibernate入门(八)级联保存或更新(含问题在末尾,求大佬指点..)

    级联保存或更新CASCADE 级联保存或更新: 作用就是:保存一方的数据的时候,会把关联的对象也同时保存. 级联保存或更新的配置: 属性名:cascade 属性值: 1.none:所有情况下均不进行关 ...

  9. Hibernate一对多关联关系保存时的探究

    在以前使用hibernate时,经常对保存存在关联关系的对象时,不确定是否能保存成功.    因此,特意对一对多关系的2个对象进行实践. 一.pojo类和配置文件的准备         这里有一点提前 ...

随机推荐

  1. H5危险的文件上传对话框

    文件对话框 文件上传对话框是一直以来就存在的网页控件. 到了 HTML5 时代,增加了更多的功能,例如支持文件多选.Chrome 甚至还支持「上传文件夹」这一私有特征: <input type= ...

  2. 通俗理解T检验与F检验的区别【转】

    转自:http://blog.sina.com.cn/s/blog_4ee13c2c01016div.html1,T检验和F检验的由来一般而言,为了确定从样本(sample)统计结果推论至总体时所犯错 ...

  3. AngularJS 验证

    AngularJS ng-model 指令用于绑定输入元素到模型中. 模型对象有两个属性: user 和 email. 我们使用了 ng-show指令, color:red 在邮件是 $dirty 或 ...

  4. xampp的Apache无法启动解决方法

    XAMPP Apache 无法启动原因1(缺少VC运行库): 这个就是我遇到的问题原因,下载安装的XAMPP版本是xampp-win32-1.7.7-VC9,而现有的Windows XP系统又没有安装 ...

  5. 使用oracle11g_instant_client来解决在不安装oracle客户端的情况下连接服务端

    一.下载instantclient_11_2,可去oracle官网进行下载. 二.解压缩下载的instantclient_11_2,将instantclient_11_2目录拖放到C:\Program ...

  6. iOS学习14之OC NSNumber + NSValue

    1.NSNumber 数值类. 作用:实现基本数据类型与OC对象类型的相互转化. 1> NSNumber创建对象 // 初始化方法 NSNumber *num1 = [[NSNumber all ...

  7. 【BZOJ3207】花神的嘲讽计划I 可持久化线段树/莫队

    看到题目就可以想到hash 然后很自然的联想到可持久化权值线段树 WA:base取了偶数 这道题还可以用莫队做,比线段树快一些 可持久化线段树: #include<bits/stdc++.h&g ...

  8. asp.net mvc下的多语言方案 包含Html,Javascript和图片

    在网上查阅了众多方案,觉得路过秋天的方案 解耦性比较好,可以不使用微软的Resource文件,而是将所有的词汇放入在一个txt的词典之中,便于维护. 步骤如下: 1)在整个程序的入口处global.a ...

  9. c#的学习

    C#,读做 "C sharp",中文译音暂时没有,非专业人士一般读"C井",专业人士一般读"C sharp".C#是一种安全的.稳定的.简单 ...

  10. Html5_移动前端不得不了解的html5 head 头标签

    移动前端不得不了解的html5 head 头标签   本文主要内容来自一丝的常用的 HTML 头部标签和百度FEX的HTML head 头标签. 移动端的工作已经越来越成为前端工作的重要内容,除了平常 ...