国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Hibernate中session使用save(Object)方法中持久化不設置自增長屬性的處理

2019-11-15 00:03:50
字體:
來源:轉載
供稿:網友
Hibernate中session使用save(Object)方法中持久化不設置自增長屬性的處理

問題描述:

  在開發過程中可能需要用到對一個對象的存儲操作,這個對象的主鍵(本例子為ID,以下ID都是指主鍵)恰好又是自動增長方式,而后可能會用到ID,遇到這種情況首先想到的是再在數據庫中查詢一次,但深思發現此思路有不合理之處,而后就考慮從Hibernate提供的session當中找有沒有相應的處理方式(畢竟是一個相當優秀的框架),然后通過百度查找到一些文章,上面有說在Hibernate執行save操作之后本身就會對傳入的對象進行持久化操作,會設置其主鍵(基礎沒有打好的原因,= =),直接調用對象的getId()方法就可獲得Id。

  好的那么問題就來了,我無論怎么getId()就是的不到自增長的id ,下面是我的代碼

Entity類:

    @Id    @Column(name = "id", nullable = false, insertable = true, updatable = true)    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }

*.hbm.xml

<id name="id">            <column name="id" sql-type="int" not-null="true"/></id>

JUnitTest代碼

    @Test    public void TestSaveId(){        UserEntity user = new UserEntity();        user.setName("123");        save(user);        System.out.PRintln(user.getId());    }    private void save(UserEntity user){        Session session = HibernateSessionFactory.getSession();        session.getTransaction().begin();        session.save(user);        session.getTransaction().commit();        HibernateSessionFactory.closeSession();    }

  于是各種百度,在setId查看值,發現在save時Hibernate會調用對象的set方法,檢查set的值后發現是0,并不是自增加后的數據,于是想到可能是配置的原因,檢查配置和Annotation發現部分用戶會設置@GeneratedValue方式來指定ID的生成策略,不知道是人品原因還是設置方式錯誤,就是沒有效果= o =。

  好的因為是在圖書館,那么呢,就要發揮一下圖書館的地理優勢,找了一本Hibernate的書籍,講到配置id的生成策略,是用得*.hbm.xml方式來配置的,心想,好吧,既然注解不行那就試一試最傳統的方式來試一試吧,添加代碼

<id name="id">            <column name="id" sql-type="int" not-null="true"/>            <generator class="native"/></id>

發現竟然成功了,好吧,說了這么多廢話具體原因大概就是配置原因。因為我是用得Intellij Idea反向工程自動生成的Bean,圖方便嘛,看來還是要好好的把基礎打好。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴城市| 沙河市| 瑞金市| 柳林县| 泗洪县| 临桂县| 岫岩| 翁牛特旗| 襄垣县| 万荣县| 岳阳县| 达尔| 建宁县| 西乌| 紫金县| 陆川县| 石渠县| 大兴区| 莲花县| 怀远县| 平阴县| 敖汉旗| 乌恰县| 易门县| 汝州市| 长子县| 花垣县| 济宁市| 万源市| 翼城县| 麻城市| 比如县| 通河县| 湛江市| 历史| 宁南县| 锡林郭勒盟| 门头沟区| 天台县| 浠水县| 庐江县|