我可以实现if-new-create JPA策略吗?

时间:2010-10-27 02:21:02

标签: eclipselink jpa-2.0

我当前的persistence.xml表生成策略设置为create。这保证了我的应用程序的每个新安装都将获得表,但这也意味着每次应用程序启动日志都会受到eclipselink异常的影响,试图创建已存在的表。 我希望的策略是表格只在缺席的情况下创建。我实现这一点的一种方法是检查数据库文件,如果不存在,则使用:

创建表
ServerSession session = em.unwrap(ServerSession.class);
SchemaManager schemaManager = new SchemaManager(session);
schemaManager.createDefaultTables(true);

但是有更清洁的解决方案吗?可能是尝试捕捉的方式?对于我来说,使用try-catch保护每个数据库方法是错误的,其中catch执行上面的代码,但我希望它是一个可以配置emf的属性。

1 个答案:

答案 0 :(得分:1)

只能在警告级别记录表创建问题。因此,您可以通过将日志级别设置为高于警告来过滤掉这些内容,或创建一个单独的EM,该EM镜像实际应用程序EM,仅用于创建表,但完全关闭日志记录。

至于从createDefaultTables中捕获异常 - 应该没有。 createDefaultTables的内部包装实际的createTable部分并忽略它可能抛出的错误。因此,由于日志级别包括警告消息,例外仅显示在日志中。您可以将它包装在try / catch中并将会话日志级别设置为off,然后在finally块中重置它。