Hints
Persisting the entity using EntityManager via persist method. Passing the Entity object Jpa transaction Manager manages the transaction boundaries.
@Entity - Used to specify class as entity.
@Id - to specify field as primary key.
@Column - used to specify the field name of the table using name attribute.
|
package com.knowledgewalls.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity(name="STUDENT_INFO")
public class StudentInfo {
@Id
@Column(name="STUDENT_ID")
private int studentId;
@Column(name="STUDENT_NAME")
private String StudentName;
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;
}
}
|
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.StudentInfo;
@Controller
public class StudentInfoController {
@Autowired
StudentInfoDAO studentInfoDAO;
@RequestMapping(value="/addStudent",method=RequestMethod.GET)
public @ResponseBody String addUsers(){
{
StudentInfo studentInfo = new StudentInfo();
studentInfo.setStudentId(1);
studentInfo.setStudentName("Raj");
studentInfoDAO.save(studentInfo);
}
return "Inserted..";
}
}
|
<?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>
|
<?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>
|
<?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>Hibernate001_BasicEntitySave</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>
|
Output
Hints Student Raj added to Student_Info table
Browser Output
![](data:image/png;base64,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eCQAAAAgDjwSAAAAEAceCQAAAIgDjwQAAADEgUcCAAAA4sAjAQAAAHHgkQAAAIA48EgAAABAHHgkAAAAIA48EgAAABAHHgkAAACIA48EAAAAxIFHAgAAAOLAIwEAAABx4JEAAACAOPBIAAAAQBx4JAAAACAOPBIAAAAQBx4JAAAAiAOPBAAAAMSBRwIAAADiwCMBAAAAceCRAAAAgDjwSAAAAEAceCQAAAAgDjwSAAAAEAceCQAAAIgDjwQAAADEgUcCAAAA4sAjAQAAAHHgkQAAAIA48EgAAABAHHgkAAAAIA48EgAAABAHHgkAAACIA48EAAAAxIFHAgAAAOLAIwEAAABx4JEAAACAOPBIAAAAQBx4JAAAACAOPBIAAAAQBx4JAAAAiAOPBAAAAMSBRwIAAADiwCMBAAAAceCRAAAAgDjwSAAAAEAceCQAAAAgDjwSAAAAEAceCQAAAIgDjwQAAADEgUcCAAAA4sAjAQAAAHHgkQAAAIA48EgAAABAHHgkAAAAIA48EgAAABAHHgkAAACIA48EAAAAxIFHAgAAAOLAIwEAAABx4JEAAACAOPBIAAAAQBx4JAAAACAOPBIAAAAQ5/8DwR6Ror7+rLYAAAAASUVORK5CYII=)
|