blogjava's web log

          blogjava's web log
          ...

          hibernate uuid.hex主鍵生成+spring帶來的困惑

          第二次插入就報錯?


          表結構

          CREATE?TABLE?`cloumn`?(
          ??`c_id`?
          varchar(16)??NOT?NULL,
          ??`u_id`?
          varchar(16)??default?NULL,
          ??`c_name`?
          varchar(100)?default?NULL,
          ??`c_sort`?
          int(11)?default?NULL,
          ??`c_beizhu`?
          varchar(100)?,
          ??
          PRIMARY?KEY??(`c_id`)
          ?
          )

          2.配置文件
          <?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>
          <class
          ????
          name="hibernate3test.dal.Cloumn"
          ????table
          ="cloumn"
          >
          ????
          <id?name="cid"?type="java.lang.String"?column="c_id"?>
          //uuid.hex生成方式
          ????????
          <generator?class="uuid.hex"?/>
          ????
          </id>
          ????
          <property?name="u_id"?type="java.lang.String"?column="u_id"?/>
          ????
          <property?name="cname"?type="java.lang.String"?column="c_name"?/>
          ?????
          <property?name="csort"?type="java.lang.Integer"?column="c_sort"?/>
          ??????
          <property?name="cbeizhu"?type="java.lang.String"?column="c_beizhu"?/>

          </class>
          </hibernate-mapping>

          spring配置文件
          ????<bean?id="test"?class="hibernate3test.dal.dal">
          ??????
          ????????????
          <property?name="sessionFactory"><ref?local="sessionFactory"/></property>???
          ????
          </bean>


          vo
          public?class?Cloumn?implements?Serializable?{

          ????
          private?String?cid;
          ????
          private?String?u_id;
          ????
          private?String?cname;
          ????
          private?Integer?csort;
          ????
          private?String?cbeizhu;
          ????
          public?Cloumn()?{
          ????}

          //geter?setter


          dao 代碼
          package?hibernate3test.dal;
          import?org.springframework.orm.hibernate3.support.HibernateDaoSupport;

          public?class?dal?extends?HibernateDaoSupport?{
          ????
          public?dal()?{
          ????}

          ????
          public?void?addCloumn()
          ????
          {
          ????????Cloumn?cc?
          =?new?Cloumn();
          ????????cc.setU_id(
          "297ebd930b46197a");
          ????????cc.setCname(
          "測試添加攔目1");
          ????????cc.setCbeizhu(
          "備注");
          ????????cc.setCsort(
          1);
          ????????
          this.getHibernateTemplate().save(cc);
          ????}


          測試
          ????public?static?void?main(String?args[])
          ????
          {
          ???
          //加載spring配置文件
          ???????????????Resource?rs=new?ClassPathResource("appcontext.xml");
          ????????BeanFactory?factory
          =new?XmlBeanFactory(rs);
          //得到dal
          ????????dal?dao=(dal)factory.getBean("test");
          //添加
          ???????dao.addCloumn();
          ???????
          //第二次再次添加就報錯..??
          ???????
          //dao.addCloumn();
          ????}



          怎么會這樣,第一次可以添加進數據庫,第二次再調用dao.addCloumn()就報錯?

          這樣做應該是沒有問題的?。浚?br />

          posted on 2006-05-31 01:04 record java and net 閱讀(8848) 評論(14)  編輯  收藏 所屬分類: javaSpring

          評論

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2006-05-31 08:16 sun

          主鍵不允許有重復值  回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2006-05-31 08:19 吳某人-不斷地學習

          是啊。

          但是uuid.hex不是由hibernate自動生成的嗎?

          怎么會報重復呢?



            回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2006-05-31 09:58 莫多

          我都用UUID,可是沒有你說的這個問題。
          不會有問題的,還有就是你用Hiberate3那么就用uuid
          你看源代碼就知道uuid.hex其實和uuid是一樣的了。只有在hibernate2里面才有區別。  回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2006-05-31 10:28 吳某人-不斷地學習

          @莫多

          我單獨用hibernate測試沒有問題,加上spring 問題就來了。。

          以下是hibernate測試代碼(通過)
          //得到session
          public Session getSession()
          {
          try
          {
          Configuration cfg = new Configuration().configure();
          SessionFactory sf=cfg.buildSessionFactory();
          return sf.openSession();
          }
          catch(Exception ee)
          {
          log.error("error:"+ee.getMessage());
          }
          return null;
          }

          //添加的方法
          public void addCloumn()
          {
          Cloumn cc = new Cloumn();
          cc.setU_id("297ebd930b46197a");
          cc.setCname("測試添家攔目1");
          cc.setCbeizhu("備注");
          cc.setCsort(1);
          Session ss=this.getSession();
          ss.save(cc);
          ss.flush();
          ss.close();
          }

          public static void main(String[] args) {
          dao test = new dao();
          //添加
          test.addCloumn();
          再次添加
          test.addCloumn();

          }

          這樣沒有問題。。

          加了spring就有問題。

          路過的高手指點。。。
            回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2006-06-06 16:49 冰樹

          煩死了
          我也一樣的有這個問題  回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2006-06-06 17:27 吳某人-不斷地學習

          你問題解決了嗎?

            回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2006-07-17 20:42 路過

          我也碰到類似的問題。。。?,F在解決了
          1。確認id字段在數據庫是vchar(32)
          2.表按id字段做索引  回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2006-07-18 08:27 吳某人-不斷地學習

          @路過
          謝謝阿。

          有空我研究1下。

          最近搞.net 了  回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2007-04-27 11:26 aaa

          unsaved-value=""  回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2008-04-23 16:23 freeit

          數據庫字段不夠長  回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2008-04-28 10:25 F

          UUID.HEX對應的數據庫字段長度32  回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2008-05-22 16:43 Andy Wu

          Cloumn cc = new Cloumn();
          cc.setU_id("297ebd930b46197a");
          cc.setCname("測試添加攔目1");
          cc.setCbeizhu("備注");
          cc.setCsort(1);

          UUID會自動生成,不需要你設置
          cc.setU_id("297ebd930b46197a");
          這句不要  回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2008-05-22 16:45 Andy Wu

          @Andy Wu
          看錯了  回復  更多評論   

          # re: hibernate uuid.hex主鍵生成+spring帶來的困惑 2008-07-08 15:55 scorpioqh

          我感覺應該是Spring的HibernateTemplate方法的問題,也就是這句調用:
          this.getHibernateTemplate().save(cc);
          你看看Spring源代碼,這個save方法在Spring內部是怎么實現的。是調用Hibernate的save方法嗎?如果調用的是saveOrUpdate方法,那就會出錯。。他會插入相同的主鍵,會認為你這個新插入的對象是游離對象。  回復  更多評論   

          導航

          常用鏈接

          留言簿(44)

          新聞檔案

          2.動態語言

          3.工具箱

          9.文檔教程

          友情鏈接

          搜索

          最新評論

          主站蜘蛛池模板: 富裕县| 正蓝旗| 兴海县| 阿城市| 东海县| 桂阳县| 栖霞市| 西林县| 贵阳市| 兴安县| 永泰县| 东光县| 大港区| 新化县| 乌什县| 金乡县| 司法| 黎平县| 综艺| 团风县| 日土县| 台东县| 沂水县| 安顺市| 资阳市| 凭祥市| 和平县| 万山特区| 张北县| 灵石县| 泰安市| 廉江市| 奉节县| 新宁县| 宜宾市| 成都市| 开化县| 闸北区| 佛学| 资兴市| 河东区|