在使用 OpenJPA 时调用 createEntityManager 时,您能否获得更具体的异常或导致 PersistenceException 的原因

如何解决在使用 OpenJPA 时调用 createEntityManager 时,您能否获得更具体的异常或导致 PersistenceException 的原因

在使用 OpenJPA 连接到 Derby 数据库时,我遇到了这个 PersistenceException,它表示无法为 Derby EmbeddedDriver 驱动程序类获取连接,但这并不重要(我知道如何修复它) :

77  RegistryManagement  INFO   [JavaFX Application Thread] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjp
a.jdbc.sql.DerbyDictionary".
<openjpa-3.1.2-r66d2a72 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: There were errors i
nitializing your configuration: <openjpa-3.1.2-r66d2a72 fatal user error> org.apache.openjpa.util.UserException: A conne
ction Could not be obtained for driver class "org.apache.derby.jdbc.EmbeddedDriver" and URL "jdbc:derby:db".  You may ha
ve specified an invalid URL.
....

重要的是,在那个异常中有这个引起:

....
Caused by: ERROR XJ004: XJ004.C : [0] db
    at 
....

这是德比错误代码之一 (https://db.apache.org/derby/docs/10.5/ref/rrefexcept71493.html)。

调用 PersistenceException 时抛出此 .createEntityManager()。说到文本长度,是不是很长。

我可以通过用 try-catch 包装 PersistenceException 来捕获 .createEntityManager(),但我不知道如何找到有关原因的更多信息,也就是。获取错误代码,因为 PersistenceException 可能因各种原因抛出。我不能用捕获 sqlExceptionUserException 来包装它,因为我的 IDE 说该方法不会抛出这些异常。

我尝试在那个 .getMessage()调用 .getCause()PersistenceException,但我得到的文本几乎相同。

当我调用 .getCause() 时,它返回 RuntimeException,我可以看到这一点,德比抛出了 sqlException

....
Caused by: java.sql.sqlException: XJ004.C : [0] db
    at 
....

再次调用 .getCause() 返回 null。

我不想在整个消息(字符串)中搜索某些错误代码的出现,因为这可能会占用大量资源。我认为这个问题可能不是 Derby 特有的,而是在使用其他 sql dbs 时发生的,这也可能会引发一些异常。

我的代码

public class DatabaseManager
{
    private EntityManagerFactory managerFactory;
    private EntityManager manager;

    public DatabaseManager(String persistenceUnitName,Map<String,String> properties)
    {
        managerFactory = Persistence.createEntityManagerFactory(persistenceUnitName,properties);
        try
        {
            manager = managerFactory.createEntityManager();
        }
        catch(PersistenceException e)
        {
            //stuff
        }
    }
....

EntityManagerFactory 是 javax.persistence 包中的一个接口:

public interface EntityManagerFactory {

    public EntityManager createEntityManager();
....

解决方法

在调试时,在 <li><a href="#!">About</a> <ul class="nav-dropdown"> <li ><a href="bio.php">Biography</a></li> <li ><a href="master.php">in the news</a></li> </ul> </li> 类中发现了这些方法,它们是 来自 OpenJPA:

PersistenceExceptions

此方法翻译捕获的@Override public RuntimeException translate(RuntimeException re) { return PersistenceExceptions.toPersistenceException(re); } ,这是问题的案例OpenJPA的RuntimeExceptionUserException引起的,然后在这里基于它创建新的SQLException并返回它:

PersistenceException

如您所见,基于 /** * Translate the given general exception. */ private static Throwable translateGeneralException(OpenJPAException ke) { Exception e = new org.apache.openjpa.persistence.PersistenceException (ke.getMessage(),getNestedThrowables(ke),getFailedObject(ke),ke.isFatal()); e.setStackTrace(ke.getStackTrace()); return e; } 值(而不是其本身)创建新的 org.apache.openjpa.persistence.PersistenceException 导致无法检索较低的原因。

OpenJPA 3.1.2 版

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?