This is a simple program to write to and read from a mysql database. When I enter the test data, all of it is visible in the mySQL client. Yet, when I use OpenJPA to retrieve the same data, all the ids appear "0", but the names are correct. What might be the cause for IDs to get lost during the transaction?
POJO Class
import java.io.Serializable;
import javax.persistence.*;
@Entity (name="People")
public class People implements Serializable{
/**
*
*/
private static final long serialVersionUID = 801578124126646759L;
@Id
private int id;
@Column(length=32)
private String name;
public People(int id,String name)
{
setId(id);
setName(name);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Class to read from database
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
public class PeopleGetter {
EntityManager entityManager;
public PeopleGetter(EntityManager entityManager)
{
this.entityManager=entityManager;
}
@SuppressWarnings("unchecked")
public List<People> getAllPeople()
{
Query query=entityManager.createQuery("SELECT x FROM People x");
return query.getResultList();
}
}
Class to print data
import java.io.PrintStream;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
public class PeoplePrinter {
private PeopleGetter peopleGetter;
private PrintStream out = System.out;
public PeoplePrinter(PeopleGetter peopleGetter)
{
this.peopleGetter=peopleGetter;
}
public void setPrintStream (PrintStream stream){
out = stream;
}
public void getAllPeopleAndPrint()
{
List<People>peopleList=peopleGetter.getAllPeople();
for(People person: peopleList) {
out.println(person.getId()+"=>"+person.getName());
}
}
}
Main Tester class
import javax.persistence.*;
public class MainClass {
public static void generateNames()
{
EntityManager entityManager = getEntityManager();
EntityTransaction userTransaction = entityManager.getTransaction();
userTransaction.begin();
entityManager.persist(new People(1,"Ali"));
userTransaction.commit();
userTransaction.begin();
entityManager.persist(new People(2,"Veli"));
userTransaction.commit();
userTransaction.begin();
entityManager.persist(new People(3,"Ahmet"));
userTransaction.commit();
userTransaction.begin();
entityManager.persist(new People(4,"Mehmet"));
userTransaction.commit();
entityManager.close();
}
public static EntityManager getEntityManager()
{
EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("openjpa");
EntityManager entityManager = entityManagerFactory.createEntityManager();
return entityManager;
}
public static void resetTable()
{
EntityManager em = getEntityManager();
Query query = em.createQuery("DELETE FROM People x");
EntityTransaction userTransaction = em.getTransaction();
userTransaction.begin();
query.executeUpdate();
userTransaction.commit();
em.close();
}
public static void main(String[] args)
{
resetTable();
generateNames();
EntityManager em = getEntityManager();
PeoplePrinter peoplePrinter=new PeoplePrinter(new PeopleGetter(em));
peoplePrinter.getAllPeopleAndPrint();
em.close();
}
}
Thanks in advance.
I assume you're using the Eclipse enhancer, which has a couple of known bugs. I'd advise getting build time or the javaagent enhancer going.