2019年9月18日 星期三
以Hibernate設計進行1對1資料表寫入資料
有時將資料寫入資料庫時須連帶寫入,例如好不容易有會員前來網站註冊,此時將基本資料寫入A資料表,其餘資料寫入B資料表,此時應該怎麼做呢?
以書籍資料及書籍資料細節當例子,思考邏輯如下:
1. 先建立2個表格並設計欄位名稱、型別、主鍵(Primary key)、不能為空(not null)...等等。
2. 建立2個名稱與表格名稱相同的Bean(.class)
3. 先給定另一方欲對應表格的Bean,再給定自身對應表格的欄位型別,之後偷懶用eclipse的getter/setter建立工具(Generate Getters and Setters...)將各自的方法建立起來。
4. 再建立各自的映射文件(*.hbm.xml),注意:
表格的名稱要對
調整generator class(共有7種,簡單介紹2種):
1. identity→採用資料庫提供的主鍵生成機制
2. foreign→使用另一個相關的識別符號作為主鍵(如使用foreign,需另給定參數)
關聯性(Relationship):
主表的映射文件中,需增加「cascade="all"或"save-update"或"delete"」
5. 最後實作java,各自產生bean之後塞入欲設定值,將bean各自設定給對方後,再使用新增方法(.save())帶入主表的bean,即可將資料同時寫入2個1對1的資料表中。
eg.
public class DemoHibernateBook1to1Action {
public static void main(String[] args) {
SessionFactory factory = HibernateUtil.getSessionFactory();
Session session = factory.openSession();
try {
session.beginTransaction();
BookBean bBean = new BookBean();
bBean.setBookname("Harry Potter");
bBean.setAuthor("J.K Rowling");
bBean.setPrice(700);
BookDetailBean bdBean = new BookDetailBean();
bdBean.setPublisher("Crown");
bdBean.setPublisheraddress("Taiwan");
bBean.setBookdetail(bdBean);
bdBean.setBook(bBean);
session.save(bBean);
session.getTransaction().commit();
} catch (Exception e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
session.close();
HibernateUtil.closeSessionFactory();
}
}
以上,同行見笑,
如有任何指教請不吝留言告知,謝謝。
訂閱:
張貼留言 (Atom)
無暇的程式碼(Clean code)金句
The only valid measurement of code quality: WTFs/minute.
-
Java裡有個函數叫random: Math.random() 其範圍為:0.0 <= random < 1.0 如果需要一顆骰子,可以這麼寫:
-
先前做過了JDBC的DAO(Data Access Object),現在要改以Hibernate實作DAO,該如何更改呢?
沒有留言:
張貼留言