Hibernate 一对多的关系
catg table
CREATE TABLE `catg` (
`id` int(11) NOT NULL auto_increment,
`cname` varchar(50) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
product talbe
CREATE TABLE `product` (
`p_id` int(11) NOT NULL auto_increment,
`id` int(11) NOT NULL,
`pname` varchar(50) default NULL,
PRIMARY KEY (`p_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Product Bean:
public class Product implements java.io.Serializable {
private Integer PId;
private Catg catg;
private String pname;
public Product() {
}
public Integer getPId() {
return this.PId;
}
public void setPId(Integer PId) {
this.PId = PId;
}
public String getPname() {
return this.pname;
}
public void setPname(String pname) {
this.pname = pname;
}
public Catg getCatg() {
return catg;
}
public void setCatg(Catg ca) {
this.catg = ca;
}
}
Catg Bean:
public class Catg implements java.io.Serializable {
private Integer id;
private String cname;
private Set products = new HashSet(0);
public Catg() {
}
public Integer getId() {
return this.id;
}
public void setId(Integer id) {
this.id = id;
}
public String getCname() {
return this.cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Set getProducts() {
return this.products;
}
public void setProducts(Set products) {
this.products = products;
}
}
Product.hbm.xml:
<hibernate-mapping>
<class name="com.vo.Product" table="product">
<id name="PId" type="java.lang.Integer">
<column name="p_id" />
<generator class="native" />
</id>
<many-to-one name="catg" class="com.vo.Catg" fetch="select">
<column name="id" not-null="true" />
</many-to-one>
<property name="pname" type="java.lang.String">
<column name="pname" length="50" />
</property>
</class>
</hibernate-mapping>
Catg.hbm.xml:
<hibernate-mapping>
<class name="com.vo.Catg" table="catg" catalog="lms">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="cname" type="java.lang.String">
<column name="cname" length="50" />
</property>
<set name="products" inverse="true" cascade="all">
<key>
<column name="id" not-null="true" />
</key>
<one-to-many class="com.vo.Product" />
</set>
</class>
</hibernate-mapping>
Test 测试文件:
public class TT {
SessionFactory sf;
Session session;
public TT()
{
try
{
Configuration cfg = new Configuration();
sf = cfg.configure().buildSessionFactory();
session = sf.openSession();
}
catch(HibernateException ex)
{
ex.printStackTrace();
}
}
public void addMethod(Catg ca)
{
Transaction t=null;
t=session.beginTransaction();
session.save(ca);
t.commit();
}
public static void main(String[] args) {
Catg ca=new Catg();
ca.setCname("12TV");
Product pro=new Product();
pro.setPname("dd");
pro.setCatg(ca);
Product pro2=new Product();
pro2.setPname("cc");
pro2.setCatg(ca);
ca.getProducts().add(pro);
ca.getProducts().add(pro2);
new TT().addMethod(ca);
}
}