Archive for the ‘hibernate’ Category.

a different object with the same identifier value was already associated with the session

This is purely a Hibernate problem. I have one to many relationship between tables. Mapping table c contains the relations between table a and table b. When I try to save a new object in a, which has a set of b objects (All those b objects are already existing), I got an Hibernate exception saying

a different object with the same identifier value was already  associated with the session:
[org.grassfield.common.entity.User#4];  nested exception is org.hibernate.NonUniqueObjectException:
a different  object with the same identifier value was already associated with the  session:
[org.grassfield.common.entity.User#4]

Seems to be quiet common issue for one to many or many to many relationship in hibernate. Need to look at it tomorrow.

Finally I found the table I have created to store the many to many relation is goofy. I removed the id column (autoincrement and PK). It resolved the issue. finally I have only two columns to store the relations.

Done!

JDBCExceptionReporter:77 – SQL Error: 0, SQLState: 08S01

I have a scheduled job running with spring beans. It is scheduled such that it will run once in a day. Whenever I restart the webapp, it is running for the first day. but on the second day onwards, it is not running – quits with the below exception :( Seems to be an issue with DB connectivity. Need to look at it.

00:54:28,090  WARN JDBCExceptionReporter:77 - SQL Error: 0, SQLState: 08S01
00:54:28,090 ERROR JDBCExceptionReporter:78 - Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: Software caused connection abort: socket write error

STACKTRACE:

java.net.SocketException: Software caused connection abort: socket write error
 at java.net.SocketOutputStream.socketWrite0(Native Method)
 at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
 at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
 at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
 at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
 at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2744)
 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612)
 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
 at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
 at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
 at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1467)
 at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
 at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
 at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
 at org.hibernate.loader.Loader.doQuery(Loader.java:674)
 at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
 at org.hibernate.loader.Loader.doList(Loader.java:2220)
 at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
 at org.hibernate.loader.Loader.list(Loader.java:2099)
 at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
 at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
 at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
 at com.eginnovations.license.dao.LicenseDAO.listExpiry(LicenseDAO.java:106)
 at com.eginnovations.license.service.LicenseService.listExpiry(LicenseService.java:291)
 at com.eginnovations.license.jobs.ExpiryTimer.run(ExpiryTimer.java:85)
 at java.util.TimerThread.mainLoop(Timer.java:512)
 at java.util.TimerThread.run(Timer.java:462)

** END NESTED EXCEPTION **

Last packet sent to the server was 15 ms ago.
00:54:28,090 ERROR ExpiryTimer:95 - Error in expiry job
org.hibernate.exception.JDBCConnectionException: could not execute query
 at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74)
 at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
 at org.hibernate.loader.Loader.doList(Loader.java:2223)
 at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
 at org.hibernate.loader.Loader.list(Loader.java:2099)
 at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
 at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
 at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
 at com.eginnovations.license.dao.LicenseDAO.listExpiry(LicenseDAO.java:106)
 at com.eginnovations.license.service.LicenseService.listExpiry(LicenseService.java:291)
 at com.eginnovations.license.jobs.ExpiryTimer.run(ExpiryTimer.java:85)
 at java.util.TimerThread.mainLoop(Timer.java:512)
 at java.util.TimerThread.run(Timer.java:462)
Caused by: com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception: 

** BEGIN NESTED EXCEPTION ** 

java.net.SocketException
MESSAGE: Software caused connection abort: socket write error

STACKTRACE:

java.net.SocketException: Software caused connection abort: socket write error
 at java.net.SocketOutputStream.socketWrite0(Native Method)
 at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)
 at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
 at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
 at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:123)
 at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2744)
 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612)
 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
 at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
 at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
 at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1467)
 at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
 at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
 at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
 at org.hibernate.loader.Loader.doQuery(Loader.java:674)
 at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
 at org.hibernate.loader.Loader.doList(Loader.java:2220)
 at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
 at org.hibernate.loader.Loader.list(Loader.java:2099)
 at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)
 at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1569)
 at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)
 at com.eginnovations.license.dao.LicenseDAO.listExpiry(LicenseDAO.java:106)
 at com.eginnovations.license.service.LicenseService.listExpiry(LicenseService.java:291)
 at com.eginnovations.license.jobs.ExpiryTimer.run(ExpiryTimer.java:85)
 at java.util.TimerThread.mainLoop(Timer.java:512)
 at java.util.TimerThread.run(Timer.java:462)

** END NESTED EXCEPTION **

Last packet sent to the server was 15 ms ago.
 at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2759)
 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1612)
 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1723)
 at com.mysql.jdbc.Connection.execSQL(Connection.java:3283)
 at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1332)
 at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1467)
 at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:93)
 at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
 at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
 at org.hibernate.loader.Loader.doQuery(Loader.java:674)
 at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
 at org.hibernate.loader.Loader.doList(Loader.java:2220)
 ... 10 more

Could not reset reader – while using BLOB

I have an POJO entity object which has two blob properties in it. The first property is nothing but string.

license.setViewCert(Hibernate.createBlob(sb.toString().getBytes()));

the second blob is a file stream

FileInputStream fileInputStream = new  FileInputStream(file);
license.setLicenseFile(Hibernate.createBlob(fileInputStream));  //no lines beyond this

When I save this object using the method

@Transactional
 public void save(Object  entity){
 logger.info("Saving object:"+entity);
 HibernateTemplate hibernateTemplate = super.getHibernateTemplate();
 Serializable save = hibernateTemplate.save(entity);
 hibernateTemplate.flush();
 hibernateTemplate.refresh(entity);
 logger.info("Object save successful:"+entity+" "+save);
 }

I got the following issue in hibernateTemplate.save(entity). I googled it but no solutions helped. I just save the blob entry. I am not opening the blob stream anywhere in my code. Any ideas why I am getting this?


org.springframework.jdbc.UncategorizedSQLException:  Hibernate operation: could not update:  [com.testsite.license.entity.License#0]; uncategorized SQLException for  SQL [update LICENSE_INFO set IP=?, ..... COMPANY_ID=? where ID=?]; SQL  state [null]; error code [0]; could not reset reader; nested exception  is java.sql.SQLException: could not reset reader
 at  org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.translate(SQLStateSQLExceptionTranslator.java:121)
 at  org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.translate(SQLErrorCodeSQLExceptionTranslator.java:322)
 at  org.springframework.orm.hibernate3.HibernateAccessor.convertJdbcAccessException(HibernateAccessor.java:424)
 at  org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
 at  org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:378)
 at  org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:639)
 at com.testsite.common.dao.BaseDAO.save(BaseDAO.java:39)
 at  com.testsite.license.service.LicenseService.addLicense(LicenseService.java:114)
 at  com.testsite.license.service.LicenseService.addLicense(LicenseService.java:151)
 at  com.testsite.license.view.LicenseUploadAction.execute(LicenseUploadAction.java:84)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
 at  sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
 at java.lang.reflect.Method.invoke(Unknown Source)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:440)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:279)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242)
 at  com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:163)
 at  com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:249)
 at  org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
 at  com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
 at  com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
 at  com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:148)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:93)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:306)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:128)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:104)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
 at  com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:148)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:128)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
 at  com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:236)
 at  org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
 at  org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:468)
 at  org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
 at  org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:76)
 at  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
 at  org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
 at  org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
 at  org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
 at  org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
 at  org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 at  org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
 at  org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
 at  org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
 at  org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
 at  org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
 at java.lang.Thread.run(Unknown Source)
Caused by:  java.sql.SQLException: could not reset reader
 at  org.hibernate.lob.BlobImpl.getBinaryStream(BlobImpl.java:83)
 at  org.hibernate.type.BlobType.set(BlobType.java:46)
 at  org.hibernate.type.BlobType.nullSafeSet(BlobType.java:117)
 at  org.hibernate.persister.entity.AbstractEntityPersister.dehydrate(AbstractEntityPersister.java:1997)
 at  org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2371)
 at  org.hibernate.persister.entity.AbstractEntityPersister.updateOrInsert(AbstractEntityPersister.java:2307)
 at  org.hibernate.persister.entity.AbstractEntityPersister.update(AbstractEntityPersister.java:2607)
 at  org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:92)
 at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
 at  org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:234)
 at  org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:142)
 at  org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
 at  org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
 at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
 at  org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:390)
 at  org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:374)
 ... 70 more

Environment:
Spring integrated with Hibernate
MySQL as backend

one-to-many in Hibernate

I am re-factoring one of the internal applications, so that the development can be module based. So my schema has unique module names which has n number of menu items; one-to-many! Here is my hibernate mapping.

<class name="com.eginnovations.common.entity.Module" table="MODULE_INFO">
 <id column="ID" name="id" type="java.lang.Long">
 <generator />
 </id>
 <property name="moduleName" column="MODULE_NAME" type="java.lang.String"/>
 <property name="enabled" column="ENABLED" type="java.lang.Boolean"/>
 <set name="menuItemList" cascade="all" inverse="true" lazy="false">
 <key column="MODULE_INFO_ID"></key>
 <one-to-many/>
 </set>
 </class>
<class name="com.eginnovations.common.entity.MenuItem" table="COMMON_MENU">
 <id column="ID" name="id" type="java.lang.Long">
 <generator />
 </id>
 <property name="menuTitle" column="MENU_TITLE" type="java.lang.String"/>
 <property name="parentId" column="PARENT_MENU_ID" type="java.lang.Long"/>
 <property name="locationHref" column="LOCATION_HREF" type="java.lang.String"/>
 <many-to-one name="module" column="MODULE_INFO_ID" cascade="all"></many-to-one>
 </class>

But when I run the unit test to get the list of modules, I ended up with the exception

org.springframework.orm.hibernate3.HibernateSystemException: IllegalArgumentException
occurred while calling setter of com.eginnovations.common.entity.Module.menuItemList;
nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException
occurred while calling setter of com.eginnovations.common.entity.Module.menuItemList
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:659)
 at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)

The problem is with data type, the menuItemList is mapped to a list instead of a set!!

Ref: http://forum.springsource.org/showthread.php?t=23090

Hibernate demo

hibernate

hibernate

This post will help you to setup the environment to write your first hello world program with Hibernate!

  1. Get the hibernate distribution from their website. (as of now, I have hibernate-distribution-3.3.2.GA-dist.zip with me)
  2. Download the jars for commons-logging, asm and JDBC driver for your database.
  3. Start a java project in eclipse.
  4. Add all jars in hibernate distribution and other libraries mentioned in step 2.
  5. Prepare your hibernate configuration file
  6. Prepare your Data Transfer Object (DTO) and SQL table
  7. Prepare your hibernate mapping file for your DTO
  8. Start JDBC calls.

Library files needed

Almost all jars are being distributed. I have downloaded commons-logging and asm extra. Then I added the JDBC driver for mysql later. Nothing more (you want more????)

hibernate-jars

hibernate-jars

Preparation of Hibernate Configuration File

This file contains the DB configuration detail for Hibernate. Generally it follows the structure like this.

<?xml version=’1.0′ encoding=’utf-8′?>
<!DOCTYPE hibernate-configuration PUBLIC
“-//Hibernate/Hibernate Configuration DTD//EN”
“http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd”>

<hibernate-configuration>
<session-factory>
<property name=”hibernate.connection.driver_class”>com.mysql.jdbc.Driver</property>
<property name=”hibernate.connection.url”>jdbc:mysql://localhost/test</property>
<property name=”hibernate.connection.username”>root</property>
<property name=”hibernate.connection.password”></property>
<property name=”hibernate.connection.pool_size”>1</property>
<property name=”show_sql”>true</property>
<property name=”dialect”>org.hibernate.dialect.MySQLDialect</property>
<property name=”hibernate.hbm2ddl.auto”>update</property>
<!– Mapping files –>
<mapping resource=”contact.hbm.xml”/>
</session-factory>
</hibernate-configuration>

name this as hibernate.cfg.xml and save it to your ’src’ or source folder. On compilation it should go to your bin or classes or any other target folder.

Preparation of DTO and SQL table

Create  a table in your DBMS using the following structure

table structure

table structure

Write a java class that serves as the DTO for this table.

package hib;

public class Contact {
private String firstName;
private String lastName;
private String email;
private long id;

public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
}

Preparation of hibernate mapping file for SQL table

We mentioned about mapping resource file. we need to create that file now. This is to tell the hibernate about the mapping between java and SQL table.

<mapping resource=”contact.hbm.xml”/>

Another XML is created as follows and named it as contact.hbm.xml

<?xml version=”1.0″?>
<!DOCTYPE hibernate-mapping PUBLIC
“-//Hibernate/Hibernate Mapping DTD 3.0//EN”
“http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>

<hibernate-mapping>
<class name=”hib.Contact” table=”CONTACT”>
<id name=”id” type=”long” column=”ID” >
<generator/>
</id>

<property name=”firstName”>
<column name=”FIRSTNAME” />
</property>
<property name=”lastName”>
<column name=”LASTNAME”/>
</property>
<property name=”email”>
<column name=”EMAIL”/>
</property>
</class>
</hibernate-mapping>

Start Quering with Hibernate

This is the final step. Write a java program that invokes Hibernate and insert data into contact table.

package hib;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class FirstExample {

/**
* @param args
*/
public static void main(String[] args) {
//Hibernate Session is the main runtime interface between a Java application and Hibernate
Session session=null;
try {
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
session = sessionFactory.openSession();
System.out.println(“Inserting record”);
Contact contact = new Contact();
contact.setId(1);
contact.setFirstName(“Pandian”);
contact.setLastName(“R”);
contact.setEmail(“abc@def.com”);

//save the contact information to the database
session.save(contact);
System.out.println(“End”);
} catch (HibernateException e) {
e.printStackTrace();
}finally
{
if (session!=null)
{
session.flush();
session.close();
}
}
}
}

Yes, Now we can start our program and see how the data is getting inserted.

console printing

console printing

Nice na.

Keep querying!

Ref: http://www.roseindia.net/hibernate/runninge-xample.shtml