我想知道是否有办法从会话工厂获取默认模式名称,不知何故?我需要得到它的原因是因为我必须使用一个本地SQL,并且我有多个会话工厂用于多个模式和一个数据源。所有生成的hibernate查询都由可以选择访问其他模式的单个用户运行。从会话工厂以编程方式获取休眠默认模式名称?
10
A
回答
15
我刚刚发现,Hibernate有{H-模式}更换,可以在原生SQL查询中使用。因此,当您连接到Oracle数据库中的一个模式并希望针对不同模式执行查询时,它可以干净地完成这项工作。例子是:
select * from {h-schema}table_name
这种方式,而不是在一个查询做手工replaceAll
,Hibernate会考虑到每个会话工厂配置了"hibernate.default_schema"
财产打理一切。
2
这将这样的伎俩:
SessionFactoryImplementor sfi = (SessionFactoryImplementor) getSessionFactory();
Settings settings = sfi.getSettings();
ConnectionProvider connectionProvider = settings.getConnectionProvider();
try {
Connection connection = connectionProvider.getConnection();
DatabaseMetaData databaseMetaData = connection.getMetaData();
String url = databaseMetaData.getURL();
//substring the string to what you want
System.out.println(url);
} catch (SQLException e) {
//throw something
}
+0
在我的系统上,这不会回应连接url ...不是架构。 – Markus 2016-06-03 16:27:22
3
当使用Criteria API的Restrictions.sqlRestriction(...)(可能是因为这种替换发生在单独的HQL API中)时,John的解决方案出现了使用{h-schema}的问题。类似迈克尔的解决方案,我用:
SessionFactoryImplementor sfi = (SessionFactoryImplementor)sessionFactory;
String name = sfi.getSettings().getDefaultSchemaName();
相关问题
- 1. 无法获得会话工厂休眠
- 2. 如何以编程方式获取会话cookie名称?
- 3. 休眠会话模式默认设置为手动
- 4. 休眠例外:无法获取默认的Bean验证工厂
- 5. 休眠配置 - 会话工厂扫描?
- 6. 休眠会话工厂始终为空
- 7. 以编程方式从FF4获取确认对话框文本
- 8. 休眠JoinColumn默认名称缺少'_id'
- 9. 获取默认名称或编号从
- 10. 如何以编程方式获取Gradle模块名称
- 11. 休眠 - 从模式
- 12. 休眠会话工厂多个DAO的一个新会话
- 13. 以编程方式获取接口的驱动程序名称
- 14. 如何以编程方式获取应用程序的名称?
- 15. 设计模式名称:是工厂吗?
- 16. 以编程方式获取友好端口名称
- 17. AngularJS:以编程方式获取注入实体名称
- 18. 以编程方式获取绑定名称
- 19. 如何以编程方式获取应用组名称?
- 20. 如何以编程方式关闭通过休眠提前获取?
- 21. 以编程方式获取从SpecRun测试生成的默认日志
- 22. 以编程方式取消默认应用程序
- 23. GWT默认样式名称
- 24. 以编程方式或从procfs获取netstat进程名信息
- 25. 编程方式获得流名称
- 26. 以编程方式设置Outlook 2013签名默认值?
- 27. 休眠:从合并会话
- 28. 当生成序列时忽略休眠默认模式
- 29. 休眠会话线程
- 30. 休眠获取模式加入不工作
我在使用Restrictions.sqlRestriction(...)时遇到了问题(...) – 2011-12-14 06:26:36