waysun一路陽光

          不輕易服輸,不輕言放棄.--心是夢的舞臺,心有多大,舞臺有多大。踏踏實實做事,認認真真做人。

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
            167 隨筆 :: 1 文章 :: 64 評論 :: 0 Trackbacks

          在具體的項目應用中,我們很少會用到一對一的級聯操作,且很多時候一對一的操作可以通過多對一實現,但是一對一有自己的好處,就是在任何時候都能保證主外鍵數據的一致性,但是多對一的情況下未必能做到.
          我在項目中具體用到了一對一的級聯操作,從網上拿了 一個例子來做,但是沒有成功,于是只好自己研究,現在把修改后的代碼帖出來.
          本例子使用hibernate3.jar+oracle數據庫
          庫表:
          CARD_TEST(CARDID[NUMBER(18)],CARDNUM[VARCHAR2(20)])
          USER_TEST(USERID[NUMBER(18)],USERNAME[VARCHAR2(20)])
          TestMain.java

          package com.gpdi.test;
          import org.hibernate.Session;
          import org.hibernate.Transaction;
          public class TestMain {
          /**
           * 存儲一個用戶
           * @param user
           */
          public void save(User user){
           user.setUsername("TEST");
           Card card=new Card();
           //Card card1=new Card();
           card.setCardnum("HGJUYT");
           //card1.setCardnum("fghy55");
           user.setCard(card);
           //user.setCard(card1);
           Session session=HibernateSessionFactory.currentSession();
              card.setUser(user);
              //card1.setUser(user);
           Transaction tr=session.beginTransaction();
           session.save(user);
           //session.save(card);
           tr.commit();
           session.close(); 
          }

           public static void main(String[] args) throws Exception {
            TestMain test=new TestMain();
               test.save(new User());
           }

          }
          Card.java

          package com.gpdi.test;

          /**
           * Card generated by MyEclipse - Hibernate Tools
           */

          public class Card  implements java.io.Serializable {
              // Fields   

               private Integer cardid;
               private String cardnum;
               private User user;

              // Constructors

              public User getUser() {
            return user;
           }
           public void setUser(User user) {
            this.user = user;
           }
           /** default constructor */
              public Card() {
              }
              /** full constructor */
              public Card(String cardnum) {
                  this.cardnum = cardnum;
              }
              // Property accessors

              public Integer getCardid() {
                  return this.cardid;
              }
             
              public void setCardid(Integer cardid) {
                  this.cardid = cardid;
              }

              public String getCardnum() {
                  return this.cardnum;
              }
             
              public void setCardnum(String cardnum) {
                  this.cardnum = cardnum;
              }

          }

          User.java
          package com.gpdi.test;

          import java.util.HashSet;
          import java.util.Set;

          /**
           * User generated by MyEclipse - Hibernate Tools
           */

          public class User  implements java.io.Serializable {
              // Fields   

               private Integer userid;
               private String username;
               private Card card;
               //private Set card = new HashSet();

              // Constructors

              public Card getCard() {
            return card;
           }

           public void setCard(Card card) {
            this.card = card;
           }

           /** default constructor */
              public User() {
              }

              /** full constructor */
              public User(String username) {
                  this.username = username;
              }

              // Property accessors

              public Integer getUserid() {
                  return this.userid;
              }
             
              public void setUserid(Integer userid) {
                  this.userid = userid;
              }

              public String getUsername() {
                  return this.username;
              }
             
              public void setUsername(String username) {
                  this.username = username;
              }
          }
          HibernateSessionFactory.java

          package com.gpdi.test;

          import org.hibernate.HibernateException;
          import org.hibernate.Session;
          import org.hibernate.cfg.Configuration;

          /**
           * Configures and provides access to Hibernate sessions, tied to the
           * current thread of execution.  Follows the Thread Local Session
           * pattern, see {@link http://hibernate.org/42.html}.
           */
          public class HibernateSessionFactory {

              /**
               * Location of hibernate.cfg.xml file.
               * NOTICE: Location should be on the classpath as Hibernate uses
               * #resourceAsStream style lookup for its configuration file. That
               * is place the config file in a Java package - the default location
               * is the default Java package.<br><br>
               * Examples: <br>
               * <code>CONFIG_FILE_LOCATION = "/hibernate.conf.xml".
               * CONFIG_FILE_LOCATION = "/com/foo/bar/myhiberstuff.conf.xml".</code>
               */
              private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";

              /** Holds a single instance of Session */
           private static final ThreadLocal threadLocal = new ThreadLocal();

              /** The single instance of hibernate configuration */
              private static final Configuration cfg = new Configuration();

              /** The single instance of hibernate SessionFactory */
              private static org.hibernate.SessionFactory sessionFactory;

              /**
               * Returns the ThreadLocal Session instance.  Lazy initialize
               * the <code>SessionFactory</code> if needed.
               *
               *  @return Session
               *  @throws HibernateException
               */
              public static Session currentSession() throws HibernateException {
                  Session session = (Session) threadLocal.get();

            if (session == null || !session.isOpen()) {
             if (sessionFactory == null) {
              try {
               cfg.configure(CONFIG_FILE_LOCATION);
               sessionFactory = cfg.buildSessionFactory();
              } catch (Exception e) {
               System.err
                 .println("%%%% Error Creating SessionFactory %%%%");
               e.printStackTrace();
              }
             }
             session = (sessionFactory != null) ? sessionFactory.openSession()
               : null;
             threadLocal.set(session);
            }

                  return session;
              }

              /**
               *  Close the single hibernate session instance.
               *
               *  @throws HibernateException
               */
              public static void closeSession() throws HibernateException {
                  Session session = (Session) threadLocal.get();
                  threadLocal.set(null);

                  if (session != null) {
                      session.close();
                  }
              }

              /**
               * Default constructor.
               */
              private HibernateSessionFactory() {
              }

          }
          Card.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">
          <!--
              Mapping file autogenerated by MyEclipse - Hibernate Tools
          -->
          <hibernate-mapping>
              <class name="com.gpdi.test.Card" table="CARD_TEST">
           
                  <id name="cardid" type="integer">
                      <column name="CARDID" />
                      <generator class="foreign" >
                      <param name="property">user</param>
                      </generator>
                  </id>
                  <property name="cardnum" type="string">
                      <column name="CARDNUM" length="45" not-null="true" />
                  </property>
                  <!--
                  foreign-key="userid"指定外鍵關聯的字段,必須,不可缺少 ,cascade="save-update"指定怎么操作級聯,非必須
                  -->
                 <one-to-one name="user" foreign-key="userid" class="com.gpdi.test.User" cascade="save-update"></one-to-one>
              </class>
          </hibernate-mapping>

          User.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">
          <!--
              Mapping file autogenerated by MyEclipse - Hibernate Tools
          -->
          <hibernate-mapping>
              <class name="com.gpdi.test.User" table="USER_TEST">
                  <id name="userid" type="integer">
                      <column name="USERID" />
                      <generator class="increment"/>
                  </id>
                  <property name="username" type="string">
                      <column name="username" length="45" not-null="true" />
                  </property>
                  <one-to-one name="card" foreign-key="cardid" class="com.gpdi.test.Card" cascade="save-update"></one-to-one>
                  <!--
                 <set name="card" inverse="true" cascade="all">
                  <key column="cardid" />
                  <one-to-many class="com.gpdi.test.Card" />
                  </set>
                   <many-to-one  name="card" class="com.gpdi.test.Card"  insert="true" unique="true" lazy="false">
                   <column name="cardid"  length="18"  />
                  </many-to-one>
                  -->
           
              </class>
          </hibernate-mapping>
          Hibernate實現一對一實例源碼
          posted on 2008-06-18 17:41 weesun一米陽光 閱讀(4596) 評論(1)  編輯  收藏 所屬分類: 經典實例Hibernate

          評論

          # re: Hibernate實現one-to-one級聯保存[自己總結] [未登錄] 2008-10-15 14:17 x
          騙人  回復  更多評論
            

          主站蜘蛛池模板: 贞丰县| 卢湾区| 巴塘县| 芜湖市| 四会市| 佛学| 台湾省| 阿克| 盐边县| 郓城县| 通江县| 涡阳县| 澳门| 巴楚县| 和硕县| 西平县| 民乐县| 文化| 昌图县| 桓台县| 乌什县| 兴和县| 南康市| 沅江市| 康定县| 水富县| 聂拉木县| 汽车| 丹凤县| 清涧县| 余庆县| 绵竹市| 贵阳市| 鹤山市| 临高县| 铜梁县| 海门市| 神池县| 阿瓦提县| 夏津县| 松江区|