Spring Data JPA

I have an existing project where I wanted to start using the Spring Data JPA library to stop having to do all the code involved in a DAO. It sounded like a smart idea (without any prior knowledge) but when I tried to implement I realized that every time you try something new there are a few hurdles and unexpected surprises.

Searching for solution and tutorial with Google might be a good fallback plan but I found so many references to different ways that I got confused before sorting it out a bit. What you don’t easily see in all the solutions is which version of which library they are using until you have read most of the solution. I wish we could more easily search for examples and tutorial based on library versions.


Here is what I used for my project:

Spring Core 3.1.2.RELEASE
Spring Data 1.1.0.RELEASE
Apache Derby (old version)
Hibernate 3.6.9 (old version)


Since I was working within an existing project I needed to work with certain things in place that I could not remove to use the Spring Data JPA library.

I needed to work with some XML files for the application context.

I needed to work with Apache Derby (old version).

I needed to work with Hibernate (old version).

Code changes

First thing that I needed to do was to add some dependencies in my pom.xml to be able to use Spring Data JPA.


It took me some trial and error to also realize that I needed an entity manager and since I was using Hibernate the logical choice was:


I already had the Hibernate dependency in my pom.xml before starting:


In my Java code I already had an entity that I wanted to use but because of the other entities that were managed under hibernate without Spring Data JPA I had to move this one to its own package so I could use some package scanning. Here is the entity code:

package com.cinq.test.domain;

import java.util.GregorianCalendar;

import javax.persistence.Column;
import javax.persistence.Entity;

public class Event {

private Long id;
private String title;
private String Description;
private GregorianCalendar date;

public Long getId() {
return id;
public void setId(Long id) {
this.id = id;
public String getTitle() {
return title;
public void setTitle(String title) {
this.title = title;
public String getDescription() {
return description;
public void setDescription(String description) {
this.description = description;
public GregorianCalendar getDate() {
return date;
public void setDate(GregorianCalendar date) {
this.date = date;


I needed to create a public interface to bind this entity to the Spring Data JPA “magic”. It simply needs to extend the CrudRepository and all the CRUD code is created for you.

package com.cinq.test.repository;

import org.springframework.data.repository.CrudRepository;

import com.cinq.test.domain.Event;

public interface EventRepository extends CrudRepository{


I also needed to add some quick configuration to my app-servlet.xml to get Spring to scan for repositories at startup:

All the code is available at:

Issues that needs to be worked out

The application runs on Tomcat but is giving an exception for a class not found on JBoss 7.1.1. I will have to look at the vfs settings for a default install.

I still need to fix the form submission.



Spring Data – JPA (Starting point at SpringSource)
The Persistence Layer with Spring 3.1 and JPA (Starting point – tutorial)
Difference between configuring data source in persistence.xml and in spring configuration files (highlighted that with Spring 3.1 you don’t need the persistence.xml)
5 minutes with – Jpa transaction (highlighted the databasePlatform property in the xml configuration)
Problems with Spring maven hibernate org/hibernate/ejb/HibernatePersistence (need for hibernate-entity-manager)
13. Data access with JDBC (reference material for many items)

Published by


Java developper that loves photography and an excellent espresso

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s