2010-10-27 51 views
0

我将当前的persistence.xml表生成策略设置为创建。这保证了我的应用程序的每个新安装都会得到这些表,但这也意味着每次启动它的应用程序都会受到eclipselink异常的影响,试图创建已经存在的表。 我希望的策略是只在他们不在时创建表格。对我来说,实现这个的一种方法是检查数据库文件,如果不使用不存在创建表:我可以实施if-new-create JPA策略吗?

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

但有一个清洁的解决方案?可能是一种尝试抓住的方式?对于我来说,在catch执行上面的代码时,用try-catch来保护每个数据库方法是个错误,但我期望它是一个可以配置emf的属性。

回答

1

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

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