浏览 7237 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2004-11-02
比如,帐单明细bill_detail这个表,就是按帐务月分为很多的表, 结构都一样,只是后缀不同。bill_detail_200409,bill_detail_200410... 我不可能每个表都映射一个对象,这样不现实, 所以,Hibernate 中怎么把结构相同的表映射为一个对象 而且,我在查询时是需要传入 帐务月的 望指点迷津,因为这是电信系统的现实问题 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2004-11-02
你可以使用SQLQuery来完成,在sql中,把表名每次替换为你当前要查询的按月表,例如:
String sql = "select {billdetail.*} from bill_detail_200409 {billdetail}"; Query query = session.createSQLQuery(sql, "billdetail", BillDetail.class); .... String sql = "select {billdetail.*} from bill_detail_200410 {billdetail}"; Query query = session.createSQLQuery(sql, "billdetail", BillDetail.class); ... |
|
返回顶楼 | |
发表时间:2004-11-02
查询问题是解决了,可是UPDAE 和 delete呢?
billdetail里有个billmonth属性表示是哪个帐务月的 session.save(billdetail) hibernate能自动知道UPATE哪个表吗? 或者有什么方法能在SAVE或UPDATE前, 能动态改某个类的映射表名? |
|
返回顶楼 | |
发表时间:2004-11-02
http://forum.iteye.com/viewtopic.php?t=8320&postdays=0&postorder=asc&start=0
最下面的帖子 |
|
返回顶楼 | |
发表时间:2004-11-03
runtime修改Hibernate configuration必须rebuild sessionfactory。而rebuild sessionfactory就意味着上面提到的那许多潜在的数据不同步。
这个也太。。。不可行了,看来只能等到HIBERNATE3稳定下来 或者有什么别的好的替代方法,欢迎大家热烈讨论 :) 以前好象看到过ROBBIN的一个讨论,自己实现Persistent Class, 在那里可以做到动态改表名吗? |
|
返回顶楼 | |
发表时间:2004-11-03
用什么实现方法不重要,重要的是你要考虑持久对象在内存中的状态。
上面提到的用SQLQuery的办法其实也不适用于使用Cache的情况。如果你使用了Cache,但是实际上你Query是重定向到另一个表取数据,这意味着你Cache中的数据和Query出来的数据状态是不一致的。所以这种情况下你就不能够使用Cache。而Update的问题更大一些,如果你动态映射不同的表,那么Hibernate没有办法判断持久对象的状态的。 因此这种需求我认为和当前ORM实现的理念是有冲突的地方的,只要动态更改映射,这种内存中的持久对象状态就没有办法判断,因此你不可能期望Hibernate去完美的解决这类问题。 |
|
返回顶楼 | |
发表时间:2004-11-04
在即将发布的LiberaotrJDO数据持久引擎1。2版本中,可以允许在runtime指定对象的表名。
LiberatorJDO提供两个简单的API借口,也用于保存,一个用于query。其他update,attach/detach, delete,批量delete都可以自动识别缓存中对象实际对应的表并保持同步 |
|
返回顶楼 | |