hibernate 简单笔记(二)
记录一个hibernate一对多的例子。
前提:
1. 当前有表t_book,如hibernate简单笔记(一)中的例子;
2. 建立新表t_owner:
CREATE TABLE t_owner( id INT AUTO_INCREMENT PRIMARY KEY, book_id INT, myname VARCHAR(30) NOT NULL, FOREIGN KEY(book_id) REFERENCES t_book(id));
一.生成对象关系映射文件TOwner.hbm.xml,并在hibernate.cfg.xml中添加mapping。下述例子中由Myeclipse自动生成:
<hibernate-mapping> <class name="com.TOwner" table="t_owner" catalog="db_fredric"> <id name="id" type="integer"> <column name="id" /> <generator class="assigned" /> </id> <many-to-one name="TBook" class="com.TBook" fetch="select"> <column name="book_id" /> </many-to-one> <property name="myname" type="string"> <column name="myname" length="30" not-null="true" /> </property> </class> </hibernate-mapping>
二.创建持久类,注意不同的地方是属于外键的那个属性被替换为一个类:
public class TOwner { private Integer id; private TBook TBook;//映射TBook类 private String myname; public Integer getId() { return id; } //略
三.操作
public static void main(String[] args) { // TODO Auto-generated method stub Configuration con = new Configuration(); con.configure(); SessionFactory sessionfactory = con.buildSessionFactory(); Session session = null; Transaction tran = null; try{ session = sessionfactory.openSession(); tran= session.beginTransaction(); TOwner owner = (TOwner) session.get(TOwner.class, new Integer(1)); System.out.println(owner.getTBook().getBook()); System.out.println(owner.getTBook().getName()); System.out.println(owner.getMyname()); tran.commit(); }catch(RuntimeException e){ if(null != tran){tran.rollback();} }finally{ session.close(); } } }
如上例通过t_book中的外码,相应的book记录也被取出。