[JAVA] Hibernate多對一關聯

Hibernate配置文件java

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools.                   -->
<hibernate-configuration>

    <session-factory>
    
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/wisher_test</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="current_session_context_class">thread</property>
    
        <mapping resource="Student.hbm.xml"/>
        <mapping resource="Category.hbm.xml"/>
        <mapping resource="Product.hbm.xml"/>
    </session-factory>

</hibernate-configuration>

商品類Category與產品類Product(多個產品對應一個分類)mysql

package com.wisher.hb.bean;

import java.io.Serializable;

public class Category implements Serializable {

    private static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    private String description;
    
    public Category() {
        
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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



package com.wisher.hb.bean;

import java.io.Serializable;

public class Product implements Serializable {

    private static final long serialVersionUID = 1L;
    private Integer id;
    private String name;
    private Double price;
    private String description;
    private Category category;
    
    public Product() {
        
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public Double getPrice() {
        return price;
    }

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

hbm.xml配置文件sql

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="com.wisher.hb.bean">
    <class name="Category" table="CATEGORY">
        <id name="id" type="java.lang.Integer">
        <column name="ID" precision="8" scale="0"></column>
            <generator class="increment"></generator>
        </id>
        
        <property name="name" type="java.lang.String">
            <column name="NAME" length="40"></column>
        </property>
        
        <property name="description" type="java.lang.String">
            <column name="DESCRIPTION" length="200"></column>
        </property>
    </class>
</hibernate-mapping>




<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="com.wisher.hb.bean">
    <class name="Product" table="PRODUCT">
        <id name="id" type="java.lang.Integer">
        <column name="ID" precision="8" scale="0"></column>
            <generator class="increment"></generator>
        </id>
        
        <property name="name" type="java.lang.String">
            <column name="NAME" length="200"></column>
        </property>
        
        <property name="price" type="java.lang.Double">
            <column name="PRICE" precision="8"></column>
        </property>
        
        <property name="description" type="java.lang.String">
            <column name="DESCRIPTION" length="2000"></column>
        </property>
        
        <many-to-one name="category" class="Category">
            <column name="CATEGORY_ID" precision="8" scale="0"></column>
        </many-to-one>
    </class>
</hibernate-mapping>

數據庫腳本數據庫

DROP TABLE CATEGORY;
CREATE TABLE CATEGORY
(
    ID INTEGER(8) NOT NULL PRIMARY KEY,
    NAME VARCHAR(40) NOT NULL,
    DESCRIPTION VARCHAR(200)
);

DROP TABLE PRODUCT;

CREATE TABLE PRODUCT
(
    ID INTEGER(8) NOT NULL PRIMARY KEY,
    NAME VARCHAR(200) NOT NULL,
    PRICE DOUBLE(8,2) NOT NULL,
    DESCRIPTION VARCHAR(2000),
    CATEGORY_ID INT(8),
    FOREIGN KEY (CATEGORY_ID) REFERENCES CATEGORY(ID)
)

測試類session

package com.wisher.hb.test;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.wisher.hb.bean.Category;
import com.wisher.hb.bean.Product;
import com.wisher.hb.util.HibernateSessionFactoryUtil;

public class ManyToOneTest {
    
    public void addCategory(Category c) {
        Session session = HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
        Transaction tx = session.beginTransaction();
        session.save(c);
        tx.commit();
    }
    
    public void addProduct(Product p) {
        Session session = HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
        Transaction tx = session.beginTransaction();
        session.save(p);
        tx.commit();
    }
    
    public void printProduct(Product p) {
        System.out.println("編號:" + p.getId());
        System.out.println("名稱:" + p.getName());
        System.out.println("價格:" + p.getPrice());
        System.out.println("描述:" + p.getDescription());
        System.out.println("分類:" + p.getCategory().getName());
        
    }

    public static void main(String[] args) {
        ManyToOneTest test = new ManyToOneTest();
        
        System.out.println("************增長一種分類****************");
        Category c = new Category();
        c.setName("Java圖書");
        c.setDescription("屬於此分類的書都是與Java開發相關的書籍");
        test.addCategory(c);
        System.out.println("************增長分類結束****************");
        
        System.out.println("************增長分類中的書籍****************");
        Product p1 = new Product();
        p1.setName("瘋狂Java講義");
        p1.setPrice(new Double(56.00));
        p1.setDescription("這是李剛編寫的一本書");
        p1.setCategory(c);
        test.addProduct(p1);
        
        Product p2 = new Product();
        p2.setName("Java開發與實戰");
        p2.setPrice(new Double(67.00));
        p2.setDescription("這是一本關於Java開發的書");
        p2.setCategory(c);
        test.addProduct(p2);
        System.out.println("************增長書籍完畢****************");
        
        Session session = HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
        Transaction tx = session.beginTransaction();
        Product p3 = (Product) session.get(Product.class, new Integer(1));
        test.printProduct(p3);
        tx.commit();
        
        HibernateSessionFactoryUtil.getSessionFactory().close();
    }

}

工具類app

package com.wisher.hb.util;

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateSessionFactoryUtil {

    private static final SessionFactory sessionFactory;
    
    static {
        try {
            sessionFactory = new Configuration().configure().buildSessionFactory();
        } catch (Throwable e) {
            throw new ExceptionInInitializerError(e);
        }
    }
    
    private HibernateSessionFactoryUtil() {
        
    }
    
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }
}
相關文章
相關標籤/搜索