`
anxin587
  • 浏览: 23385 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

hibernate初级 映射复合自然主键

阅读更多

现在根据customer和orders写一个复合主键的例子,两张表,如下所示

CREATE TABLE CUSTOMERS(ID INT AUTO_INCREMENT PRIMARY KEY,NAME VARCHAR(20), AGE INT )

CREATE TABLE ORDERS (ID INT,CUSTOMER_ID INT, NAME VARCHAR(20),PRICE DOUBLE,
 CONSTRAINT PK_OR PRIMARY KEY(ID,CUSTOMER_ID),
CONSTRAINT FK_OR FOREIGN KEY (CUSTOMER_ID) REFERENCES CUSTOMERS(ID))

package entity;
import java.util.*;
public class Customer implements java.io.Serializable
{
 private Long id;
 private String name;
 private Integer age;
 private Set orders=new HashSet();


 private void setId(Long id)
 {
  this.id=id;
 }
 public Long getId()
 {
  return this.id;
 }

 public void setName(String name)
 {
  this.name=name;
 }
 public String getName()
 {
  return this.name; 
 }
 
 public void setAge(Integer age)
 {
  this.age=age;
 }
 public Integer getAge()
 {
  return this.age;
 }

 public void setOrders(Set orders)
 {
  this.orders=orders;
 }
 public Set getOrders()
 {
  return this.orders;
 }

 
}

package entity;
public class Order implements java.io.Serializable
{
 private Long id;
 private String name;
 private Double price;
 private Customer customer;
 public Long cstid;

 public void setCstid(Long cstid)
 {
  this.cstid=cstid;
 }
 public Long getCstid()
 {
  return this.cstid;
 }

 public void setId(Long id)
 {
  this.id=id;
 }
 public Long getId()
 {
  return this.id;
 }

 public void setName(String name)
 {
  this.name=name;
 }
 public String getName()
 {
  return this.name;
 }

 public void setPrice(Double price)
 {
  this.price=price;
 }
 public Double getPrice()
 {
  return this.price;
 }

 public void setCustomer(Customer customer)
 {
  this.customer=customer;
 }
 public Customer getCustomer()
 {
  return this.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 package="entity">
 <class name="Customer" table="CUSTOMERS">
  <id name="id" column="ID">
   <generator class="increment"/>
  </id>
  <property name="name" type="string" column="NAME"/>
  <property name="age"/>
  <set name="orders" cascade="delete" inverse="true" lazy="true">
   <key column="CUSTOMER_ID"/>
   <one-to-many class="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 package="entity">
 <class name="Order" table="ORDERS">
  <composite-id>
   <key-property name="id" column="ID" type="long" />
   <key-property name="cstid" column="CUSTOMER_ID" type="long"/>
  </composite-id>
  
  <property name="name"/>
  <property name="price" type="double" />
  <many-to-one name="customer" column="CUSTOMER_ID" class="Customer" insert="false" update="false"/>
 </class>
</hibernate-mapping>

package util;
import org.hibernate.cfg.*;
import org.hibernate.*;
import entity.*;

public class HibernateUtil
{
 private static SessionFactory sessionFactory;
 static
 {
  try
  {
   Configuration config=new Configuration();
   config.addClass(Customer.class).addClass(Order.class);
   sessionFactory = config.buildSessionFactory();
  }
  catch (Exception e)
  {
   e.printStackTrace();
  }
 }

 public static SessionFactory getSessionFactory()
 {
  return sessionFactory;
 }
}

hibernate.dialext=org.hibernate.dialext.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/PKTEST
hibernate.connection.username=root
hibernate.connection.password=
hibernate.show_sql=false

package service;
import util.*;
import entity.*;
import org.hibernate.*;
import java.util.*;
public class Test
{
 public static void saveCustomer()
 {
  Session session=HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  Customer c=new Customer();
  c.setName("aaa");
  c.setAge(new Integer(23));
  session.save(c);
  session.getTransaction().commit();
 }

 public static void saveOrder()
 {
  Session session=HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  Order o=new Order();
  o.setId(new Long(1));
  o.setCstid(new Long(2));
  o.setName("cpn");
  o.setPrice(new Double(25));
  session.save(o);
  session.getTransaction().commit();
 }
 
 public static void listCstOrders()
 {
  Session session=HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  Set ls=((Customer)session.load(Customer.class,new Long(1))).getOrders();
  Iterator it=null;
  for(it=ls.iterator();it.hasNext();)
  {
   System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
   Order o=(Order)it.next();
   System.out.println(o.getName());
   System.out.println("<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
  }
  session.getTransaction().commit();
 }

 public static void getCustomer()
 {
  Session session=HibernateUtil.getSessionFactory().openSession();
  session.beginTransaction();
  Order or=new Order();
  or.setId(new Long(1));
  or.setCstid(new Long(2));
  Order o=(Order)session.load(Order.class,or);
  System.out.println("{{{{{{{{{{{{{{{{{{{");
  System.out.println(o.getCustomer().getName());
  System.out.println("}}}}}}}}}}}}}}}}}}}");
  session.getTransaction().commit();
 }

 public static void main(String[] args)
 {
  //Test.getCustomer();
  //Test.listCstOrders();
  Test.saveCustomer();
  //Test.saveOrder();
 }
}

<project name="hibernate-tutorial" default="compile">
 <property name="sourcedir" value="${basedir}/src"/>
 <property name="targetdir" value="${basedir}/bin"/>
 <property name="librarydir" value="${basedir}/lib"/>
 
 <path id="libraries">
  <fileset dir="${librarydir}">
   <include name="*.jar"/>
  </fileset>
 </path>

 <target name="clean">
  <delete dir="${targetdir}"/>
  <mkdir dir="${targetdir}"/>
 </target>


 <target name="compile" depends="clean, copy-resources">
  <javac srcdir="${sourcedir}"
  destdir="${targetdir}"
  classpathref="libraries"/>
 </target>

 <target name="copy-resources">
  <copy todir="${targetdir}">
  <fileset dir="${sourcedir}">
   <exclude name="**/*.java"/>
  </fileset>
  </copy>
 </target>

 <target name="run" depends="compile">
  <java fork="true" classname="service.Test" classpathref="libraries">
  <classpath path="${targetdir}"/>
  </java>
 </target>

</project>

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics