zoukankan      html  css  js  c++  java
  • [Hibernate]

    事实上one to many 和 many to one是一样的,这是一个相互的过程。

    hibernate.cfg.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    
    <hibernate-configuration>
    
        <session-factory>
    
            <!-- Database connection settings -->
            <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
            <property name="connection.url">jdbc:mysql://127.0.0.1/testdb</property>
            <property name="connection.username">root</property>
            <property name="connection.password"></property>
    
            <!-- JDBC connection pool (use the built-in) -->
            <property name="connection.pool_size">1</property>
    
            <!-- SQL dialect -->
            <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
    
            <!-- Enable Hibernate's automatic session context management -->
            <property name="current_session_context_class">thread</property>
    
            <!-- Disable the second-level cache  -->
            <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property>
    
            <!-- Echo all executed SQL to stdout -->
            <property name="show_sql">true</property>
    
            <!-- Drop and re-create the database schema on startup -->
            <property name="hbm2ddl.auto">update</property>
    
            <mapping resource="com/my/hbm/User.hbm.xml"/>
            <mapping resource="com/my/hbm/Card.hbm.xml"/>
    
        </session-factory>
    
    </hibernate-configuration>

    User.hbm.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <class name="com.my.bean.User" table="user">
            <id name="id" type="long" column="id">
                <generator class="native"></generator>
            </id>
            <property name="userName" column="user_name" type="java.lang.String" length="100" not-null="true"/>
            <set name="card" cascade="all">
                <key column="user_id"/>
                <one-to-many class="com.my.bean.Card"/>
            </set>
        </class>
    </hibernate-mapping>

    Card.hbm.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <class name="com.my.bean.Card" table="card">
            <id name="id" column="id" type="long">
                <generator class="native"></generator>
            </id>
            <many-to-one name="user" column="user_id" class="com.my.bean.User" not-null="true" cascade="save-update"></many-to-one>
            <property name="cardName" column="card_name" type="java.lang.String" length="100" not-null="true"/>
        </class>
    </hibernate-mapping>

    POJO:

    package com.my.bean;
    
    import java.util.Set;
    
    public class User {
        private long id;
        private String userName;
        private Set<Card> card;
        
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public Set<Card> getCard() {
            return card;
        }
        public void setCard(Set<Card> card) {
            this.card = card;
        }
    }
    package com.my.bean;
    
    public class Card {
        private long id;
        private String cardName;
        private User user;
        
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getCardName() {
            return cardName;
        }
        public void setCardName(String cardName) {
            this.cardName = cardName;
        }
        public User getUser() {
            return user;
        }
        public void setUser(User user) {
            this.user = user;
        }
    }

    Test:

    package com.my.init;
    
    import java.util.HashSet;
    
    import org.hibernate.Session;
    import org.hibernate.Transaction;
    
    import com.my.bean.Card;
    import com.my.bean.User;
    import com.my.dao.util.HibernateUtil;
    
    public class Test {
    
        public static void main(String[] args) {
            Session session = HibernateUtil.getSessionFactory().openSession();
            Transaction tx = session.beginTransaction();
    
            try {
                // create user
                User user = new User();
                user.setUserName("Robin");
                
                // create card for CBC
                Card cardCBC = new Card();
                cardCBC.setCardName("CBC");
                cardCBC.setUser(user);
                // create card for BBC
                Card cardBBC = new Card();
                cardBBC.setCardName("BBC");
                cardBBC.setUser(user);
                
                // add user card
                user.setCard(new HashSet<Card>());
                user.getCard().add(cardCBC);
                user.getCard().add(cardBBC);
                
                // save action
                session.save(user);
                session.save(cardCBC);
                session.save(cardBBC);
                
                tx.commit();
            } catch (Exception e) {
                tx.rollback();
                e.printStackTrace();
            } finally {
                session.close();
            }
        }
    
    }

    在Card.hbm.xml中如果去掉many-to-one节点和在Card bean中移除user的getter/setter,事实上在DB生成的数据表结构是一样的。

    如果移除这个many-to-one,那么在使用时,可以不需要setUser(..)。可以简洁的写代码。

    但一般情况下,user和card是相互的,对user来说是一对多,对card来说是多对一。所以在user中写one-to-many,在card中写many-to-one.

    参考引用:

    http://www.tutorialspoint.com/hibernate/hibernate_one_to_many_mapping.htm

  • 相关阅读:
    jsp小测文件上传+servlet+分页 47/32(继续努力!)
    使用分层实现业务处理
    jsp 2018年5月7日11:04:15题库52/34
    jsp题库 (一)小测(25/21)
    Js2云题库,好题就得藏起来
    Jsp前2纠错
    【转】js限制用户上传文件类型
    【转】HTML from enctype 定义和实例
    fmt jstl标签 时间格式化例子
    【转】hibernate中lazy的使用
  • 原文地址:https://www.cnblogs.com/HD/p/3934625.html
Copyright © 2011-2022 走看看