爪哇一角

          共同探討STRUTS#HIBERNATE#SPRING#EJB等技術
          posts - 3, comments - 6, trackbacks - 0, articles - 99
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Hibernate中實現one-to-many

          Posted on 2006-09-20 10:04 非洲小白臉 閱讀(383) 評論(0)  編輯  收藏 所屬分類: hibernate

          Hibernate中實現one-to-many

          近兩天來在研究Hibernate中的one-to-one和one-to-many的問題,做了很多試驗,發現實現表關系時,在hibernate-mapping中generator的class設為uuid.hex,上述的兩種關系可以實現,也就是數據庫的主鍵設為varchar(MSSQL2000),但是主鍵改成int型的標識卻彈出“ERROR SessionImpl:2379 - Could not synchronize database state with session”和“net.sf.hibernate.HibernateException: SQL insert, update or delete failed (row not found)”異常,百思不得其解。下面貼出主鍵設為uuid.hex時的實現代碼:

          Child.hbm.xml
          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
          <hibernate-mapping>
          ??? <class name="test.pojo.Child" table="child">
          ??????? <id name="cid" column="cid" >
          ??????????? <generator class="uuid.hex"/>
          ??????? </id>
          ??????? <property name="cname" column="cname" />
          ??????? <many-to-one name="parent" column="pid" />
          ??? </class>
          </hibernate-mapping>

          Child.java

          package test.pojo;

          public class Child {
          ??? private String cname;
          ??? private String pid;
          ??? private Parent parent;
          ??? private String cid;
          ??? public Child() {
          ??? }

          ??? public String getCid() {
          ??????? return cid;
          ??? }

          ??? public void setCid(String cid) {
          ??????? this.cid = cid;
          ??? }

          ??? public String getCname() {
          ??????? return cname;
          ??? }

          ??? public void setCname(String cname) {
          ??????? this.cname = cname;
          ??? }

          ??? public String getPid() {
          ??????? return pid;
          ??? }

          ??? public void setPid(String pid) {
          ??????? this.pid = pid;
          ??? }

          ??? public Parent getParent() {
          ??????? return parent;
          ??? }

          ??? public void setParent(Parent parent) {
          ??????? this.parent = parent;
          ??? }
          }

          Parent.hbm.xml
          <?xml version="1.0"?>
          <!DOCTYPE hibernate-mapping SYSTEM "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >
          <hibernate-mapping>
          ??? <class name="test.pojo.Parent" table="parent" >
          ??????? <id name="pid" column="pid" type="integer">
          ??????????? <generator class="uuid.hex" />
          ??????? </id>
          ??????? <property name="pname" column="pname" />
          ??????? <set name="child" lazy="true" inverse="true" cascade="all">
          ??????????? <key column="cid" />
          ??????????? <one-to-many class="capinfo.negroup.test.pojo.Child"/>
          ??????? </set>
          ??? </class>
          </hibernate-mapping>

          Parent.java
          package test.pojo;

          import java.util.HashSet;

          public class Parent {
          ??? private String pname;
          ??? private java.util.Set child = new HashSet();
          ??? private String pid;
          ??? public Parent() {
          ??? }

          ??? public String getPid() {
          ??????? return pid;
          ??? }

          ??? public void setPid(String pid) {
          ??????? this.pid = pid;
          ??? }

          ??? public String getPname() {
          ??????? return pname;
          ??? }

          ??? public void setPname(String pname) {
          ??????? this.pname = pname;
          ??? }

          ??? public java.util.Set getChild() {
          ??????? return child;
          ??? }

          ??? public void setChild(java.util.Set child) {
          ??????? this.child = child;
          ??? }

          }

          TestHibernate.java
          package test.pojo;

          public class TestHibernate {
          ??? public TestHibernate() {
          ??? }

          ??? public static void main(String[] argv) {
          ??????? //先建立多的初始數據
          ??????? Child child = new Child();
          ??????? child.setCname("kerry");
          ??????? //再建立一的初始數據
          ??????? Parent parent = new Parent();
          ??????? parent.setPname("Kelphen");
          ??????? //將多的數據放入到一里
          ??????? parent.getChild().add(child);
          ??????? //再將一放到多里,這樣一與多互相擁有對方
          ??????? child.setParent(parent);
          ??????? try {
          ??????????? BaseDAOHibernate.saveObject(parent);
          ??????? }
          ??????? catch (DAOException daoe) {
          ??????????? daoe.printStackTrace();
          ??????? }
          ??? }
          }

          主站蜘蛛池模板: 灵寿县| 临高县| 汾西县| 福州市| 张家界市| 江川县| 麻江县| 阿拉尔市| 沈阳市| 湘潭市| 信阳市| 革吉县| 三台县| 兖州市| 青铜峡市| 西和县| 巴青县| 马山县| 丹阳市| 泗阳县| 北安市| 广南县| 永丰县| 玛纳斯县| 宜宾县| 苏尼特右旗| 洪雅县| 昭苏县| 泉州市| 贵德县| 徐汇区| 广饶县| 岑巩县| 志丹县| 建德市| 江源县| 青浦区| 敖汉旗| 苏尼特右旗| 英吉沙县| 轮台县|