小编典典

JPA Entiy使用同义词而不是表

hibernate

我有一个基于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中间表)根据用途和序列(一个或多个的selectinsertupdatedelete),以myschema_app
  • 声明私有同义词,myschema_app以便使用与以前相同的名称并隐藏其他模式的名称前缀
  • 将属性更改hibernate.default_schema为新的架构名称persistence.xml
  • 在Tomcat的数据源定义中更改用户/密码 context.xml

当我将hibernate.hbm2ddl.auto设置为时启动应用程序时,validate当框架尝试创建一个EntityManagerFactory告诉我该表丢失的框架时,我得到一个异常。当我直接在带有myschema_app连接的sql工具中执行select语句时,一切正常。

我知道在另一个表上使用同义词对应用程序是透明的。有谁知道我可能忽略了什么?


阅读 338

收藏
2020-06-20

共1个答案

小编典典

我的猜测是hbm2ddl是专门针对表而不是同义词进行搜索的,但是您的应用程序确实应该像表存在于架构中一样工作。尝试删除hbm2ddl选项并测试您的应用程序。

编辑:看来我的猜测是对的:https :
//forum.hibernate.org/viewtopic.php?p=2438033

2020-06-20