2012-07-26 57 views
2

這是一個簡單的程序,用於寫入和讀取mysql數據庫。當我輸入測試數據時,它全部在mySQL客戶端中可見。然而,當我使用OpenJPA檢索相同的數據時,所有ID都顯示爲「0」,但名稱是正確的。在交易過程中ID可能會丟失的原因是什麼?使用OpenJPA從數據庫中未檢索到(?)的主鍵(ID)

POJO類

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; 
} 

} 

類從數據庫中讀取

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(); 
} 

} 

類打印數據

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()); 
    } 
} 
} 

主測試儀類

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(); 
} 
} 

提前致謝。

回答

相關問題