hibernate動態表名映射

來源:互聯網
上載者:User

標籤:單位   set   conf   實現   繼承   使用   boa   重新定義   其他   

  引自:http://blog.csdn.net/xvshu/article/details/39187779 

最近的一個項目有一個需求,有N個考核單位,要對每個考核單位產生一張考核情況表,這樣做的目的是橫切資料庫,這這個需求的實現中,我的組員遇到了一個技術問題,我將我的解決辦法和整個思考過程與大家分享,

 

思路:

        用一個設定檔,一個類去映射多個表,(每個表的結構相同)。按照平時的做法,有多少個表就要 寫多少個設定檔,豈不是很麻煩。怎樣才能唯寫一個設定檔就能達到上述目的呢? 經過研究,發現hibernate中的NamingStrategy可以達到這個目的。它是用來定義表名和列名映射規 則的一個介面。我們要通過實現這個介面來實現自己的命名策略。這個介面中包含的十個方法,其中的 public String classToTableName(String className)是通過類名來映射表名的。實現我們的想法就要用 到這個方法。好了,下面來看怎麼做: 

 

步驟:

1、自訂一個類MyNamingStrategy來實現NamingStrategy。(這樣你要實現10個方法,如果其他方法 不需要,我們可以通過繼承它的一個適配器類DefaultNamingStrategy來只實現我們需要的方法)好了,我 們就繼承DefaultNamingStrategy 吧。 


2、實現public String classToTableName(String className)方法來實現自己命名策略。 


我這的業務需要是每隔一個月就要換一個表。比如1月用biz_1,那麼2月就用biz_2….但是這些表的結構是相同的。我們要做的就是通過獲得月份來動態選擇表。我們從這個方法中這樣寫: 

 

 

[java] view plain copy 

/** 

 *這個類是重新定義一個hibernate的命名規範 

**/  

public class MyNamingStrategy extends DefaultNamingStrategy {   

  1. //這是為了實現單例  
  2. public static final MyNamingStrategy INSTANCE = new MyNamingStrategy();   
  3. //重新定義名稱映射關係  
  4. public String classToTableName(String className) {   
  5. //自己的名稱定義規則  
  6. return “biz_” + Calendar.getInstance().get(Calendar.DAY_OF_MONTH);   
  7.     }   
  8. }



 

 

好了,這樣就可以根據月份來動態選擇表名了。 


3、使用命名策略。 


要使用這個命名策略可以這樣:  

 

Configuration cfg = new Configuration()   

    .setNamingStrategy(MyNamingStrategy.INSTANCE)   

    .configure(“hibernate.cfg.xml”)  

    .addFile(“biz.hbm.xml”);







ok,這樣就可以實現我們的動態表名映射啦!

 

總結:

很多時候,我是經常被自己的思維所束縛,這是我的一種思維慣性,而且我只要找到一種解決問題的方法,就會當作寶典收藏,別人有比你好的,也會有種排斥的資訊,二者恰恰是阻礙我們進步的牢籠,我們應該衝破這曾牢籠,我們應該更大膽些,想到且看到我們和以前截然不同的一面!

hibernate動態表名映射

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.