package com.bjsxt.hibernate; import java.util.HashSet; import java.util.Set; public class Customer { private int id; private String name; private Set<Order> orders = new HashSet<Order>(); public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set<Order> getOrders() { return orders; } public void setOrders(Set<Order> orders) { this.orders = orders; } }
package com.bjsxt.hibernate; public class Order { private int id; private String number; private Customer customer; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Customer getCustomer() { return customer; } public void setCustomer(Customer customer) { this.customer = customer; } }
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.bjsxt.hibernate.Customer" table="t_customers"> <id name="id"> <generator class="native"></generator> </id> <property name="name"></property> <set name="orders"> <key column="customerId"></key> <one-to-many class="com.bjsxt.hibernate.Order"/> </set> </class> </hibernate-mapping>
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.bjsxt.hibernate.Order" table="t_orders"> <id name="id"> <generator class="native"></generator> </id> <property name="number"></property> <many-to-one name="customer" column="customerId" class="com.bjsxt.hibernate.Customer" cascade="save-update" /> </class> </hibernate-mapping>
package com.bjsxt.test; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import com.bjsxt.hibernate.Customer; import com.bjsxt.hibernate.Order; public class HibernateORMappingTest { private static SessionFactory sessionFactory; @BeforeClass public static void beforeClass() { sessionFactory = new Configuration().configure().buildSessionFactory(); } @AfterClass public static void afterClass() { sessionFactory.close(); } @Test public void testSave() { Session session = sessionFactory.openSession(); Transaction tx = session.beginTransaction(); Customer customer = new Customer(); customer.setName("rose"); Order order = new Order(); order.setNumber("2011012401"); order.setCustomer(customer); session.save(order); tx.commit(); session.close(); } @Test public void testQuery() { Session session = sessionFactory.openSession(); String hql = "from Customer c inner join c.orders as o where c.id=1"; Query query = session.createQuery(hql); List<Object[]> result = query.list(); for(Object[] obj : result) { Customer customer = (Customer)obj[0]; Order order = (Order)obj[1]; System.out.print(customer.getId() + " " + customer.getName() + " " + order.getNumber()); System.out.println(); } } @Test public void testQuery2() { Session session = sessionFactory.openSession(); String hql = "select c.id,c.name,o.number from Customer c inner join c.orders as o"; Query query = session.createQuery(hql); List<Object[]> result = query.list(); for(Object[] row : result) { for(int i = 0; i < row.length; i++) { System.out.print(row[i] + " "); } System.out.println(); } } @Test public void testSchemaExport() { new SchemaExport(new Configuration().configure()).create(false, true); } public static void main(String[] args) { beforeClass(); } }