关于这个PersistenceException有很多问题,但我还没有看到一些问题,其中特定的代码行只是偶尔抛出这个异常(但不是随机的:-)。
那么,你知道吗,为什么一旦我的简单应用程序发现提供商还可以,但后来就不行了?
NetBeans IDE 7.0.1,NetBeans平台应用程序,使用持久性链接库和Derby embbed。
我正在尝试Geertjan的CRUD可创建功能"教程",但在保存新的Trip:时出现了PersistenceException
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at javax.persistence.Persistence.createEntityManagerFactory(Unknown Source)
at org.mv.mm.api.TripSearchDAO.createTransactionalEntityManager(TripSearchDAO.java:61)
at org.mv.mm.api.TripSearchDAO.create(TripSearchDAO.java:41)
at org.mv.mm.api.TripQuery$3.create(TripQuery.java:69)
[catch] at org.mv.mm.api.TripType.create(TripType.java:64)
但在DAO类的"搜索"方法中,也调用了这个私有方法createTransactionalEntityManager,并正确创建了EntityManager。为什么会这样?
好吧,这个问题和这里的许多其他问题一样(好吧,我还没有解决,但我明天会再试一次)。它每次都会失败。我看错了试跳接球块,所以我没有注意到这个异常。每次调用Persistence.createEntityManagerFactory("TripPU").createEntityManager()时都会发生这种情况。
在我看来,这个问题已经得到了回答:PersistenceException之所以只是偶尔发生,是因为其他时候,当它看起来一切都很好时,有问题的行:
em = Persistence.createEntityManagerFactory("TripPU").createEntityManager();
从try的另一个类调用。。。catch块,其中"catch"块不起任何作用。所以我没有注意到它总是失败。
还找到了真正问题的真正解决方案:在这些情况下,确实要检查persistence.xml(如TripPU)中持久性单元的名称是否与调用persistence.createEntityManagerFactory("TripPU").createEntityManager()正确;
PU与DB实体不同,所以当你尝试做一个稍微不同的例子(不同的表等)时,教程可能会让你混淆。