栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

JPA,外部化列,表或架构名称?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JPA,外部化列,表或架构名称?

Hibernate具有

org.hibernate.cfg.Configuration
扫描软件包和读取配置文件的功能。

它使用

org.hibernate.cfg.AnnotationBinder.bindClass(...)
哪个读取类上的注释。

这些类(8 kLOC)和方法用了很长时间,以至于我不容易阅读它们,因此我不希望将Configuration子类化。

即使注意到所有类和初始化代码都绑定到具体类而没有注入自己的可能性,似乎用当前的Hibernate 4.x架构也无法轻松解决我的任务。

我开始寻找替代方案,并在EBean邮件列表中询问配置的外部化问题,并得到了答案:

public class MySchemaNamingConvention    extends com.avaje.ebean.config.UnderscoreNamingConvention {@Overrideprotected TableName getTableNameFromAnnotation(Class<?> beanClass) {   final Table t = findTableAnnotation(beanClass);   if (t != null && !isEmpty(t.name())) {       String catalog = t.catalog();       String schema = t.schema();       //////   CUSTOM schema processing pre HERE.       //////   CUSTOM schema processing pre HERE.       //////   CUSTOM schema processing pre HERE.       return new TableName(quoteIdentifiers(catalog),      quoteIdentifiers(schema),      quoteIdentifiers(t.name()));     }     return null;}

真是太容易了,以至于我跟hibernate打个招呼!

更新
@Xstian。在迁移到Ebean之前,我先设置了默认模式,

hibernate.default_schema
并广泛使用
view
s和
synonym
s来控制可访问哪个表(Oracle):

grant select on ANOTHER_SCHEMA.TBL to MY_SCHEMA;create or replace view MY_SCHEMA.TBL as select * from ANOTHER_SCHEMA.TBL;create or replace synonym MY_SCHEMA.TBL for ANOTHER_SCHEMA.TBL;

在迁移到视图/同义词期间,我仅遇到数据库约束问题。

如果您使用Oracle-视图上的FK约束不起作用,除非您使用

disable novalidate
关键字和相同的约束添加到引用的PK:

alter view MY_SCHEMA.XXX add constraint PK_XXX primary key(ID) disable novalidate;alter table/view MY_SCHEMA.TBL add constraint FK_XXX foreign key (XXX_ID)  references MY_SCHEMA.XXX (ID) disable novalidate;

而且同义词对Oracle完全不允许FK约束!

似乎Hibernate决定了数据布局,我认为应该切换到更灵活的框架Ebean,但我还要评估sql2o和jOOQ。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/616075.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号