多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php框架 > 框架設(shè)計 > Hibernate之一對多關(guān)聯(lián)映射

Hibernate之一對多關(guān)聯(lián)映射

來源:程序員人生   發(fā)布時間:2016-03-24 09:18:29 閱讀次數(shù):3883次

這里以顧客、定單為例。1個顧客對應(yīng)著多個定單。
數(shù)據(jù)表以下:
顧客表訂單表

在雙向1對多關(guān)聯(lián)映照中,需要在”1“的1方添加set屬性來寄存”多“的1方,在屬性上添加@OneToMany注解,mapping指向”1“的表。
同時在”多“的1方,添加”多“的對象屬性,在并在這個屬性上加上@ManyToOne注解 和@JoinColumn注解,后者的name值為”多“的1方的表中外鍵列的列名。
需要注意的是,1旦使用1對多關(guān)聯(lián)映照,數(shù)據(jù)庫中1定要添加外鍵,外鍵對應(yīng)的是”1“的1方的主鍵,所以類型1定是1樣的。
實體類:

@Entity @Table(name = "customer", catalog = "etoak") public class Customer implements java.io.Serializable { private Integer id; private String name; private Setorderses = new HashSet(0); public Customer() { } public Customer(String name, Setorderses) { this.name = name; this.orderses = orderses; } @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @Column(name = "name", length = 32) public String getName() { return this.name; } public void setName(String name) { this.name = name; } @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "customer") public SetgetOrderses() { return this.orderses; } public void setOrderses(Setorderses) { this.orderses = orderses; } }
@Entity @Table(name = "orders", catalog = "etoak") public class Orders implements java.io.Serializable { private Integer id; private Customer customer; private Integer money; public Orders() { } public Orders(Customer customer, Integer money) { this.customer = customer; this.money = money; } @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "id", unique = true, nullable = false) public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "cid") public Customer getCustomer() { return this.customer; } public void setCustomer(Customer customer) { this.customer = customer; } @Column(name = "money") public Integer getMoney() { return this.money; } public void setMoney(Integer money) { this.money = money; } }

dao層:

public interface IDao{ public boolean add( T obj); public boolean delete( T obj); public boolean update (T obj); public T get(Classcls,int id); }

dao層實現(xiàn)類:

這里注意1下:在使用hibernate的時候必須要提交事務(wù),不然的話履行完 沒有毛病,hibernate履行語句也打印出來了,但數(shù)據(jù)表里面就是沒有添加數(shù)據(jù)。

public class DaoImpl<T> implements IDao<T> { Session session = null; Transaction tx = null; @Override public boolean add(T obj) { try { session = SF.getSession(); tx = session.beginTransaction(); session.save(obj); tx.commit(); return true; } catch (Exception e) { e.printStackTrace(); return false; }finally{ if(session!=null)session.close(); } } public boolean delete(T obj){ try{ session = SF.getSession(); tx = session.beginTransaction(); session.delete(obj); tx.commit(); return true; }catch(Exception e){ e.printStackTrace(); return false; }finally{ if(session!=null) session.close(); } } public boolean update(T obj){ try { session = SF.getSession(); tx = session.beginTransaction(); session.update(obj); tx.commit(); return true; } catch (Exception e) { e.printStackTrace(); return false; } } @Override public T get(Class<T> cls, int id) { try { session = SF.getSession(); tx = session.beginTransaction(); T t =(T) session.get(cls,id); tx.commit(); return t; } catch (Exception e) { e.printStackTrace(); return null; }finally{ if(session!=null)session.close(); } } }

測試類:

public class Test { public static void main(String[] args) { //添加 1 /* 這里注意1下,在添加Customer也就是“1”時,必須要給orders setCustomer值,不然添加后,orders表添加的那1列外鍵值會為空。 */ Customer cus = new Customer(); cus.setName("etoak"); Orders o1 = new Orders(); o1.setMoney(100); Orders o2 = new Orders(); o2.setMoney(200); cus.getOrderses().add(o1); cus.getOrderses().add(o2); o1.setCustomer(cus);o2.setCustomer(cus); IDaodao = new DaoImpl(); dao.add(cus); //添加 多 Orders o1 = new Orders(); o1.setMoney(1001); IDaocusDao = new DaoImpl(); Customer cus = cusDao.get(Customer.class, 2); o1.setCustomer(cus); IDaodao = new DaoImpl(); dao.add(o1); //刪除 多 /*Orders o1 = new Orders(); o1.setId(2); IDaodao = new DaoImpl(); dao.delete(o1);*/ //刪除 1 /*Customer cus = new Customer(); cus.setId(2); IDaodao = new DaoImpl(); dao.delete(cus);*/ } }

session工廠類 :
這里要說明1下。 就是使用注解方式和非注解方式這個工廠類是有1點不同的。new 的configuration 不1樣。注解方式用的是AnnotationConfiguration類

public class SF { private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml"; private static final ThreadLocalthreadLocal = new ThreadLocal(); private static Configuration configuration = new AnnotationConfiguration(); private static org.hibernate.SessionFactory sessionFactory; private static String configFile = CONFIG_FILE_LOCATION; static { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err .println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } private SF() { } public static Session getSession() throws HibernateException { Session session = (Session) threadLocal.get(); if (session == null || !session.isOpen()) { if (sessionFactory == null) { rebuildSessionFactory(); } session = (sessionFactory != null) ? sessionFactory.openSession() : null; threadLocal.set(session); } return session; } public static void rebuildSessionFactory() { try { configuration.configure(configFile); sessionFactory = configuration.buildSessionFactory(); } catch (Exception e) { System.err .println("%%%% Error Creating SessionFactory %%%%"); e.printStackTrace(); } } public static void closeSession() throws HibernateException { Session session = (Session) threadLocal.get(); threadLocal.set(null); if (session != null) { session.close(); } } public static org.hibernate.SessionFactory getSessionFactory() { return sessionFactory; } public static void setConfigFile(String configFile) { SF.configFile = configFile; sessionFactory = null; } public static Configuration getConfiguration() { return configuration; } }

hibernate.cfg.xml

<hibernate-configuration> <session-factory> <property name="dialect">org.hibernate.dialect.MySQLDialectproperty> <property name="connection.url">jdbc:mysql://localhost:3306/etoakproperty> <property name="connection.username">rootproperty> <property name="connection.password">rootproperty> <property name="connection.driver_class">com.mysql.jdbc.Driverproperty> <property name="myeclipse.connection.profile">mysqlproperty> <property name="show_sql">trueproperty> <property name="format_sql">trueproperty> <mapping class="com.etoak.entity.Student"/> <mapping class="com.etoak.entity.Classes"/> session-factory> hibernate-configuration>


生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 亚洲视频 中文字幕 | 日本三级成人中文字幕乱码 | 国产亚洲欧美ai在线看片 | 日本h在线精品免费观看 | 多人伦精品一区二区三区视频 | 久久国产精品老女人 | 都市激情校园春色亚洲 | 波多野结衣一级视频 | 中文字幕日韩一区二区不卡 | 亚欧毛片 | 羞羞动漫在线免费观看 | 中文字幕视频网 | 亚洲网站在线 | 在线播放免费一级毛片欧美 | 日本校园春色 | 在线观看免费亚洲 | 亚洲欧美手机在线观看 | 亚洲日韩精品欧美一区二区 | 亚洲一区二区三区四区 | 欧美日韩看片 | 2022国内精品免费福利视频 | 欧美极品尤物在线播放一级 | 91精品国产福利在线观看性色 | 青娱乐伊人 | 男女视频在线免费观看 | 日本a v 黄 | 亚洲欧美综合乱码精品成人网 | 99re这里有免费视频精品 | 男女xx| h黄网站| 色综合天天综合网国产成人网 | 国产精品久久一区 | 亚洲性网站 | 久久婷婷人人澡人人爱91 | 亚洲欧美色欧另类欧 | 国产精品视频播放 | 国产午夜免费一区二区三区 | 激情久久久久久久久久 | 国产性生活 | 亚洲黄色在线观看网站 | 亚洲人成网亚洲欧洲无码 |