从会话工厂以编程方式获取hibernate默认模式名称?

Joh*_*ohn 12 hibernate sessionfactory

我想知道是否有办法从会话工厂获取默认模式名称,不知何故?我需要得到它的原因是因为我必须使用一个本机SQL,并且我有多个会话工厂用于多个模式和单个数据源.所有生成的hibernate查询都由一个用户运行,该用户可以选择访问其他模式.

Joh*_*ohn 20

我刚刚发现hibernate有{h-schema}替换,可以在本机sql查询中使用.因此,当您连接到oracle数据库中的一个模式并希望针对不同模式执行查询时,这可以干净地完成工作.示例是:

select * from {h-schema}table_name
Run Code Online (Sandbox Code Playgroud)

这种方式而不是replaceAll在查询中执行手动,hibernate会处理每个会话工厂配置了"hibernate.default_schema"属性的所有事情.


Rya*_*lok 5

在使用Criteria API的Restrictions.sqlRestriction(...)时,约翰的解决方案在使用{h-schema}时遇到了问题(可能是因为这种替换发生在单独的HQL api中)。与Michael的解决方案类似,我使用了:

SessionFactoryImplementor sfi = (SessionFactoryImplementor)sessionFactory;
String name = sfi.getSettings().getDefaultSchemaName();
Run Code Online (Sandbox Code Playgroud)