【发布时间】:2013-12-24 01:15:18
【问题描述】:
最终编辑
我没有看到任何日志的原因是我使用的是旧版本的 log4j。 Hibernate hbm2ddl 使用 slf4j 进行日志记录,因此 log4j 1 忽略了所有日志。现在我升级到具有 slf4j 网桥的 log4j2,我在日志中看到了所有错误。
天哪,我可以从这里一一挑选转换错误并修复它们,坏消息(对我来说)是它们很多!
谢谢大家!
最终编辑结束
我有一个非常复杂的 java7+Spring3.2.0+hibernate3 Web 应用程序,它与 Postgresql 数据库一起工作。客户现在要求使用 Oracle 作为项目的数据库。我无法弄清楚 Oracle 中的 Schema 使用情况。
Postgresql 数据库分为大约 10 个不同的模式,以及用于审计记录的独立模式。我在注释中定义表和模式。即:
@Entity
@Table(name = "language", schema = "live")
@Audited
@AuditTable(value="language_aud", schema="live_aud")
public class Language implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Integer id;
etc...
这在 Postgres 中运行良好。要创建数据库,我首先手动创建模式:
CREATE SCHEMA live;
然后使用 hibernate.hbm2ddl.auto=create 启动应用程序。这就像一个魅力,并且数据库已正确构建。
现在转移到 Oracle 我在架构定义方面遇到了问题。我尝试了 CREATE SCHEMA 语句,但没有成功,但后来发现在 Oracle schema=user 中(对我来说很奇怪,但一定有原因)。所以我创建了所有用户来匹配 Schema 结构。即:
CREATE USER live IDENTIFIED BY 'password';
** 编辑 **
但这仍然不起作用,当我运行应用程序时,表不是由 hibernate 创建的(我修复了之前的异常,将 try/catch 添加到 postProcess 方法,由于未创建数据库,它们失败了)
我可以与Oracle正确连接,我使用参数:
jdbc.driver=oracle.jdbc.driver
jdbc.url=jdbc:oracle:thin:@//localhost:1521/XE
jdbc.username=system
jdbc.password='password'
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
我做错了什么?我必须以不同的方式创建模式吗?还是系统用户没有权限?
该应用程序由许多客户共享,因此我的要求是尽量避免完全改变结构以移除架构。在完美的世界中,应用程序应该是独立于数据库的,因此可以与任何数据库一起使用。
感谢您提供的任何帮助,如果您需要更多信息,请询问。
马蒂亚
【问题讨论】:
-
能不能开启休眠日志,看看生成了什么sql查询。您还更新了休眠配置中的方言吗?
-
感谢提示,方言确实是错误的,但我仍然得到错误。当错误出现时,我将使用完整的日志进行编辑。我有怎么 sql = true
-
因为我使用的是旧版本的 log4j,所以没有记录任何内容...
标签: java spring oracle hibernate postgresql