JPA Entiy使用同义词而不是表
我有一个基于Seam 2.2的Java EE 5 Web应用程序,其中有一堆表通过Hibernate 3.3.3映射到JPA
1.0实体。在开发过程中,它在Tomcat 6,Oracle 10 XE和Windows 7上运行。
现在,运营部门提出了将数据模型拆分为一个模式(该模式是所有数据库对象的所有者myschema
)和一个充当应用程序的数据库用户的模式的请求myschema_app
。所以我做了以下事情:
- 创建模式
myschema_app
- 授予对来自所有必要的表对象权限
myschema
(经常一和N:M中间表)根据用途和序列(一个或多个的select
,insert
,update
,delete
),以myschema_app
- 声明私有同义词,
myschema_app
以便使用与以前相同的名称并隐藏其他模式的名称前缀 - 将属性更改
hibernate.default_schema
为新的架构名称persistence.xml
- 在Tomcat的数据源定义中更改用户/密码
context.xml
当我将hibernate.hbm2ddl.auto
设置为时启动应用程序时,validate
当框架尝试创建一个EntityManagerFactory
告诉我该表丢失的框架时,我得到一个异常。当我直接在带有myschema_app
连接的sql工具中执行select语句时,一切正常。
我知道在另一个表上使用同义词对应用程序是透明的。有谁知道我可能忽略了什么?
-
我的猜测是hbm2ddl是专门针对表而不是同义词进行搜索的,但是您的应用程序确实应该像表存在于架构中一样工作。尝试删除hbm2ddl选项并测试您的应用程序。
编辑:看来我的猜测是对的:https :
//forum.hibernate.org/viewtopic.php?p=2438033