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

标签 java mysql database jpa openjpa

这是一个简单的程序,用于写入和读取 mysql 数据库。当我输入测试数据时,所有数据都在 mySQL 客户端中可见。然而,当我使用 OpenJPA 检索相同的数据时,所有 ID 都显示为“0”,但名称是正确的。身份证件在交易过程中丢失的原因可能是什么?

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 增强器,它有几个 known bugs .我建议得到 b uild time or the javaagent增强子去。

关于java - 使用 OpenJPA 从数据库中未检索到主键(ID)(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11670910/

相关文章:

每个命令都拒绝 MySql 访问

php - 如何根据数组从mysql数据库获取数据

node.js - Discord Bot 数据库 (JAVASCRIPT)

java - 在不同包中具有相同名称的两个实体

java - 如何根据区域设置格式化数字

php - 比较运算符 Sql 查询与 php

php - 使用 SQLite 迁移 Laravel

php - 多对多关系示例

java - Autowiring 与导入

java - 在导出的jar文件中添加fxml文件