Knowledge Walls
J2EE Technologies Tutorial
Hyderabad, Andhra Pradesh, India
How to enable One to Many with CascadeType PERSIST using Spring Hibernate Framework
3534 Views
Hints 
OneToMany annotation cascadeType enables child records automatically get inserted when the parent record get insert.

Example
@OneToMany(cascade=CascadeType.PERSIST)
@JoinTable(name="STUDENT_ADDRESS",
                joinColumns=@JoinColumn(name="STUDENT_ID"),
                inverseJoinColumns=@JoinColumn(name="ADDRESS_ID"))
Output: SQL
create table Address
(addressId integer not null auto_increment,
city varchar(255),
state varchar(255),
studentInfo_STUDENT_ID integer,
primary key (addressId)) ENGINE=InnoDB;

create table STUDENT_ADDRESS
(STUDENT_ID integer not null,
ADDRESS_ID integer not null,
unique (ADDRESS_ID)) ENGINE=InnoDB;

create table STUDENT_INFO
(STUDENT_ID integer not null auto_increment,
STUDENT_NAME varchar(255),
primary key (STUDENT_ID)) ENGINE=InnoDB;

alter table Address
add index FK1ED033D4FA21989
(studentInfo_STUDENT_ID),
add constraint FK1ED033D4FA21989 foreign key (studentInfo_STUDENT_ID) references STUDENT_INFO (STUDENT_ID);

alter table STUDENT_ADDRESS
add index FK250691B08544B485 (ADDRESS_ID),
add constraint FK250691B08544B485 foreign key (ADDRESS_ID) references Address (addressId);

alter table STUDENT_ADDRESS
add index FK250691B0C4B1E0F3 (STUDENT_ID),
add constraint FK250691B0C4B1E0F3 foreign key (STUDENT_ID) references STUDENT_INFO (STUDENT_ID);
Output: Browser 
Project Explorer Preview 
StudentInfo.java
package com.knowledgewalls.entity;

import java.util.ArrayList;
import java.util.Collection;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.OneToMany;

@Entity(name="STUDENT_INFO")
public class StudentInfo {
    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="STUDENT_ID")
    private int studentId;
    
    @Column(name="STUDENT_NAME")
    private String StudentName;
    
    @OneToMany(cascade=CascadeType.PERSIST)
    @JoinTable(name="STUDENT_ADDRESS",joinColumns=@JoinColumn(name="STUDENT_ID"),inverseJoinColumns=@JoinColumn(name="ADDRESS_ID"))
    private Collection<Address> addresses = new ArrayList<Address>();

    public int getStudentId() {
        return studentId;
    }
    public void setStudentId(int studentId) {
        this.studentId = studentId;
    }

    public String getStudentName() {
        return StudentName;
    }
    public void setStudentName(String studentName) {
        StudentName = studentName;
    }
    
    public Collection<Address> getAddresses() {
        return addresses;
    }
    public void setAddresses(Collection<Address> addresses) {
        this.addresses = addresses;
    }
}
Address.java
package com.knowledgewalls.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToOne;

import org.hibernate.annotations.NotFound;
import org.hibernate.annotations.NotFoundAction;

@Entity
public class Address {
    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    private int addressId;
    private String city;
    private String state;
    
    @ManyToOne
    @NotFound(action=NotFoundAction.IGNORE)
    StudentInfo studentInfo;
    
    public int getAddressId() {
        return addressId;
    }
    public void setAddressId(int addressId) {
        this.addressId = addressId;
    }
    
    public String getCity() {
        return city;
    }
    public void setCity(String city) {
        this.city = city;
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
}
StudentInfoDAO.java
package com.knowledgewalls.dao;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

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

import com.knowledgewalls.entity.StudentInfo;

@Repository
@Transactional
public class StudentInfoDAO {
    
    @PersistenceContext
    EntityManager em;
    
    public void save(StudentInfo userDetails){
        System.out.println("Called for; Student:"+userDetails.getStudentId());

        try {
            em.persist(userDetails);
        }
        catch(Exception e){
            System.out.println("Insertion Failure; Student:"+userDetails.getStudentId());
            e.printStackTrace();
        }
    }
}
StudentInfoController.java
package com.knowledgewalls.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.knowledgewalls.dao.StudentInfoDAO;
import com.knowledgewalls.entity.Address;
import com.knowledgewalls.entity.StudentInfo;

@Controller
public class StudentInfoController {
    
    @Autowired
    StudentInfoDAO studentInfoDAO;
    
    @RequestMapping(value="/addStudent",method=RequestMethod.GET)
    public @ResponseBody String addUsers(){
        {
            StudentInfo studentInfo = new StudentInfo();
                studentInfo.setStudentName("Raj");
                
                Address addr = new Address();
                    addr.setCity("City 1");
                    addr.setState("State 1");
                    
                studentInfo.getAddresses().add(addr);
                
                Address addr2 = new Address();
                    addr2.setCity("City 2");
                    addr2.setState("State 2");
                    
                studentInfo.getAddresses().add(addr2);
                    
            studentInfoDAO.save(studentInfo);
        }
        
        return "Inserted..";
        
    }
}
Persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" >

  <persistence-unit name="hibernatePersistenceUnit">
          <properties>
            <property name="hibernate.hbm2ddl.auto" value="create" />
        </properties>
  </persistence-unit>

</persistence>
Beans-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
        http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

    <context:component-scan base-package="com.knowledgewalls" />
    <mvc:annotation-driven />
    <tx:annotation-driven transaction-manager="transactionManager" />
    
    <bean id="emf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceXmlLocation" value="classpath*:persistence.xml" />
        <property name="persistenceUnitName" value="hibernatePersistenceUnit" />
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter" ref="jpaVendorAdapter"/>
    </bean>
    
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/test" />
        <property name="username" value="root" />
        <property name="password" value="mysql" />
        <property name="initialSize" value="5" />
        <property name="maxActive" value="10" />
    </bean>
    
    <bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
        <property name="database" value="MYSQL"></property>
        <property name="showSql" value="true"></property>
        <property name="generateDdl" value="false"></property>
        <property name="databasePlatform" value="org.hibernate.dialect.MySQL5InnoDBDialect"></property>
    </bean>
    
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
         <property name="entityManagerFactory" ref="emf" />
    </bean>
    
    <bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
    <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
    <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

</beans>
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>Hibernate014_OneToManyCascadePersist</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
 
  <servlet>
    <servlet-name>beans</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>beans</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>
Best Lessons of "Hibernate 3.0 Examples"
Top lessons which are viewed more times.
  Copyright © 2014 Knowledge walls, All rights reserved
KnowledgeWalls
keep your tutorials and learnings with KnowledgeWalls. Don't lose your learnings hereafter. Save and revise it whenever required.
Click here for more details