![](/img/trans.png)
[英]Migrating From Spring Security to Oracle Access Manager
[英]Migrating Spring application from Postgres to Oracle: defining table's schema
最终编辑
我没有看到任何日志的原因是我使用的是旧版本的log4j。 Hibernate hbm2ddl使用slf4j进行日志记录,因此log4j 1忽略了所有日志。现在我升级到了具有slf4j桥的log4j2,我看到了日志中的所有错误。
Godd new就是从这里我可以逐个选择转换错误并修复它们,坏消息(对我而言)就是它们很多!
谢谢大家!
最终编辑结束
我有一个非常复杂的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
我做错了什么? 我是否必须以不同的方式创建架构? 或者系统用户没有权限?
应用程序由许多客户端共享,因此我的要求是尽量避免完全更改删除模式的结构。 在完美的世界中,应用程序应该是数据库indipendant,因此可以使用任何数据库。
感谢您提供任何帮助,如果您需要更多信息,请询问。
马蒂亚
在oracle中,id不是自动生成的。 您必须手动管理它或使用序列。
不使用
@GeneratedValue(strategy = GenerationType.AUTO)
尝试这个
@Id
@SequenceGenerator(name="language_generator", sequenceName="language_sequence")
@GeneratedValue(generator="language_generator")
@Column(name = "id")
private Integer id;
确保为所有型号执行此操作
**编辑**在创建Oracle用户时尝试此操作:
SQL> CREATE USER live IDENTIFIED BY 'password'
2 QUOTA UNLIMITED ON SYSTEM
3 QUOTA UNLIMITED ON SYSAUX;
SQL> GRANT CREATE SESSION TO live;
SQL> GRANT CREATE TABLE TO live;
SQL> GRANT SELECT_CATALOG_ROLE TO live;
SQL> GRANT EXECUTE_CATALOG_ROLE TO live;
SQL> EXECUTE DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(grantee => 'live');
SQL> GRANT UNLIMITED TABLESPACE TO live;
SQL> GRANT RESOURCE TO live;
转移到生产时将其锁定。 因为在一些特权,如丢弃表等能力PS。不要打电话给你的模型用户。 正如预防措施一样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.