1。order bean
package bean;
import java.io.Serializable;
/**
*
* @author zwc
*
*/
@SuppressWarnings("serial")
public class Order implements Serializable{
private long id;
private String orderNumber;
private Customer customer;
public long getId() {
return id;
}
protected void setId(long id) {
this.id = id;
}
public String getOrderNumber() {
return orderNumber;
}
public void setOrderNumber(String orderNumber) {
this.orderNumber = orderNumber;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
2。order.hbm.xml
<?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 package="bean">
<class name="Order" table="t_order">
<id name="id" column="id" type="long">
<generator class="native"/>
</id>
<property name="orderNumber" column="order_number" type="string" not-null="true"/>
<many-to-one name="customer" column="customer_id" class="Customer" not-null="true"/>
</class>
</hibernate-mapping>
3.customer bean
package bean;
import java.io.Serializable;
import java.sql.Timestamp;
/**
*
* @author zwc
*
*/
@SuppressWarnings("serial")
public class Customer implements Serializable{
private Long id;
private String firstName = "N";
private String lastName = "N";
private int phone;
private boolean married;
private char sex;
private byte[]image;
private Timestamp registeredTime;
private int count;
public Customer(){
//empty
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
protected String getName() {
return firstName + "-" + lastName;
}
protected void setName(String name) {
String [] names = name.split("-");
if(names.length >= 1){
this.firstName = names[0];
}
if(names.length >= 2){
this.lastName = names[1];
}
}
public int getPhone() {
return phone;
}
public void setPhone(int phone) {
this.phone = phone;
}
public boolean isMarried() {
return married;
}
public void setMarried(boolean married) {
this.married = married;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public byte[] getImage() {
return image;
}
public void setImage(byte[] image) {
this.image = image;
}
public Timestamp getRegisteredTime() {
return registeredTime;
}
public void setRegisteredTime(Timestamp registeredTime) {
this.registeredTime = registeredTime;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
}
4.customer.hbm.xml
<?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 package="bean">
<class name="bean.Customer" table="t_customer">
<id name="id" column="id" type="long">
<generator class="native"/>
</id>
<property name="name" column="name" type="string" not-null="true"/>
<property name="phone" column="phone" type="integer"/>
<property name="married" column="married" type="boolean"/>
<property name="sex" column="sex" type="character"/>
<property name="image" column="image" type="binary"/>
<property name="registeredTime" column="registered_time" type="timestamp"/>
<property name="count" formula="(select count(*) from t_customer as c)"/>
</class>
</hibernate-mapping>
5.测试类
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Timestamp;
import java.util.Iterator;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import bean.Customer;
import bean.Order;
/**
*
* @author zwc
*
*/
@SuppressWarnings("serial")
public class OperateOrder extends HttpServlet {
private Logger logger = Logger.getLogger(OperateOrder.class);
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request,response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
Configuration config = new Configuration();
Session session = config.addClass(Order.class)
.addClass(Customer.class)
.buildSessionFactory()
.openSession();
Transaction t = session.beginTransaction();
try {
//Customer ic = (Customer) session.get(Customer.class, new Long(93));
Customer ic = new Customer();
ic.setFirstName("IC1");
ic.setLastName("IC11");
ic.setRegisteredTime(new Timestamp(System.currentTimeMillis()));
session.save(ic);
Order io = new Order();
io.setOrderNumber("Insert123455789");
io.setCustomer(ic);
session.save(io);
注意:对于这里的保存,可以先保存“一对多”,是customer持久化,然后保存order
或者,用hibernate的级联保存 cascade="save-update" 用在order.hbm.xml 的 <many-to-one/>上
t.commit();
} catch (Exception e) {
t.rollback();
注意:当保存失败,要回滚,这是一个,好的习惯!!! logger.debug("保存Order失败");
}
Query query = session.createQuery("from Order");
Iterator<Order> i = (Iterator<Order>) query.iterate();
while(i.hasNext()){
Order order = i.next();
out.println(order.getCustomer().getFirstName()
+ "-" + order.getCustomer().getLastName()
+ "................" + order.getOrderNumber());
}
}
}