未使用 OpenJPA 从数据库检索主键 (ID)(?)

2024-01-09

这是一个向 mysql 数据库写入和读取的简单程序。当我输入测试数据时,所有数据都在 mySQL 客户端中可见。然而,当我使用 OpenJPA 检索相同的数据时,所有 id 都显示为“0”,但名称是正确的。交易过程中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();
}
 }

提前致谢。


我假设您正在使用 Eclipse 增强器,它有几个已知的错误 https://issues.apache.org/jira/browse/OPENJPA-1879。我建议得到b构建时间或 javaagent http://openjpa.apache.org/enhancement-with-ant.html增强剂去。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未使用 OpenJPA 从数据库检索主键 (ID)(?) 的相关文章

随机推荐