【问题标题】:Mapping entities to dynamic tablename将实体映射到动态表名
【发布时间】:2012-07-08 07:34:00
【问题描述】:

我想使用动态表名创建到数据源的休眠映射。这些表反映了由旧工具从另一个来源提取的数据集,并且表名本身包含有关表中数据的元信息。每个请求的表名都会改变。

是否可以在休眠中映射它?我正在考虑一些临时拦截器来更改表​​名,但我无法真正想到最好的方法。


12/07/12 编辑

..我可能应该提到只读访问是我所需要的。表格代表“报告”数据,因此不应更改。

【问题讨论】:

  • 想更好地解释表名是如何确定的?是某种分片,例如“Johns 的记录转到 PeopleJohn 表”,还是真的为每个请求创建新表?
  • 对于每个请求来说都是新表。表名由时间戳和 id 组成,例如201206081405_86223471.

标签: hibernate mapping


【解决方案1】:

动态表名在 hibernate 中并不容易,因为 sessionfactory 是不可变的。您每次都需要建立一个新的会话工厂。根据用例,我看到几个选项:

  • 只读:使用具有固定列别名的 sqlquery 并使用 AliasToBean
  • r*阅读:* 使用 xml 映射模板并在每个请求上建立一个新的 sessionfactory(可能很慢)
  • 如果可能的表名在启动时已知:为每个表名生成一个映射并使用实体名来区分在运行时使用哪个表名

【讨论】:

  • 好的,不知道 AliasToBean。看起来很有希望。我宁愿避免每次都必须构建一个新的 SessionFactory,并且在启动时无法知道表,因为它们是并行生成的..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 1970-01-01
  • 2015-08-17
  • 2020-04-18
相关资源
最近更新 更多