java - JPA EntityManager 不一致地将对象添加到数据库

标签 java mysql jpa

我正在使用 JPA EntityManager 将项目插入 MySQL 数据库,我有读取文件、收集数据然后将该数据添加到适当文件的代码。我正在写的是我正在尝试做的事情的简化版本,我 100% 感激这既让我更难理解我实际上在做什么,也可能隐藏错误的来源,所以谢谢你的支持与我一起。我使用的对象p是前面生成的,是一个LinkedHashMap的形式

LinkedHashMap<String MyObject>

其中“MyObject”是一个具有多个属性(如“名称”、“重量”、“颜色”)的类,字符串是一个用作主键的 UUID。

private final EntityManagerFactory emf = Persistence.createEntityManagerFactory(myUI.PERSISTENCE_UNIT);
private final EntityManager em = emf.createEntityManager();

for (String key : p.keySet()) {
    databaseWriter.writeToDatabase(em, key, p.get(key).getName(),
    p.get(key).getColor(), p.get(key).getWeight();
}

“databaseWriter.writeToDatabase”的相关代码是

public void writeToDatabase (EntityManager em, String id, String name,String Color, String weight) {
    em.GetTransaction().begin();
    MyObjectTable mt = new MyObjectTable();
    mt.setId(id);
    mt.setColor(color);
    mt.setWeight(weight);
    mt.setName(name);
    em.persist(mt);
    em.getTransaction().commit();
}

我已经确认我正在以正确的形式生成对象并将信息正确地传递给函数,但我的行为最奇怪。假设“p”中有15个项目,它只会添加其中的几个,而且它添加的几个是不一致的,甚至“几个”是多少也不一致。我希望它是因为我正在用 EntityManager 做一些愚蠢的事情,这在这里很明显。

如果您需要比这更多的细节,我很乐意提供它们,我只是想不出什么会导致只添加一些对象(并且添加的那些对象具有正确的信息),但只有特定的少数,在随后的尝试中不相同,并且根本没有出现错误。

编辑:我使用的 jpa 提供程序是 EclipseLink,我用我遗漏的东西编辑了工厂

编辑:这是一个例子,一个正在输入的数据的 eclipse 服务器日志没有显示在数据库中,任何人都可以从中收集到任何东西吗?

[EL Finest]: query: 2016-09-14 12:18:23.867--UnitOfWork(1915196068)--Thread(Thread[http-nio-8084-exec-252,5,main])--Execute query InsertObjectQuery(com.myfiles.stuff_the.PartTable[   idPart=99a26bca-d818-4959-a328-75c1f05a1e38 ])
[EL Fine]: sql: 2016-09-14 12:18:23.867--ClientSession(1291663611)--Connection(1232332820)--Thread(Thread[http-nio-8084-exec-252,5,main])--INSERT INTO PartTable (idPart, dateCreated, description, hash, isBasic, lastModified, name, riskGroup, authorId, formatId, nucseqId) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
bind => [99a26bca-d818-4959-a328-75c1f05a1e38, 2016-09-14 12:18:23.82, , null, 1, 2016-09-14 12:18:23.82, AXL2 mRNA, null, 1, null, d6f807f0-ac91-4421-8ff2-4940706fd5bb]

我查看了整个日志文件,没有发现任何错误,有正确数量的 persist() 和 commit() 语句,不太确定发生了什么。

最佳答案

原来问题是没有下面这行

em.clear();

在我使用commit之后

关于java - JPA EntityManager 不一致地将对象添加到数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39494184/

相关文章:

java - Hibernate/JPA - 对象本身的外键索引

java - 在 Zookeeper 节点上调用 getChildren 时忽略锁定节点

MySQL多对多关系问题

java - 线程和中断: Continue or exit?

Mysql DDL在本地wamp上可以工作,但不能在在线服务器上导入

mysql - 更快地选择查询多个主键

java - JPA Hibernate 和具有用于 map 的 ElementCollection

java - jpa 持久保存具有两个所有者的同一对象

java - 开发 Google App Engine 应用程序时无法在本地测试中使用相对路径访问文件

java - 事件仅由一个 bean 接收? (尽管有好几个)