2016-06-13 69 views
0

這是我在DAOImpl(休眠)代碼:休眠錯誤時提交會議

@Transactional 
    public void insert(Cage cage) { 

     Session session = null; 
     Transaction tx = null; 

     try{ 
      session = getHibernateTemplate().getSessionFactory().openSession(); 
      tx = session.beginTransaction(); 
      session.saveOrUpdate(cage); 
      session.flush(); 
      session.clear(); 
      tx.commit(); 

     }catch(RuntimeException e){ 
      try{ 
       tx.rollback(); 
      }catch(RuntimeException rbe){ 
       rbe.printStackTrace(); 
       System.out.println("Couldn’t roll back transaction"); 
      } 
      throw e; 
     }finally{ 
      if(session!=null){ 
       session.close(); 
      } 
     } 
    } 

當第二次操作的數據錄入(同PK)發生這個問題:

org.hibernate.exception.ConstraintViolationException:無法執行JDBC批量更新

+0

您應該包含整個堆棧跟蹤,而不是第一行。 – azurefrog

+0

主鍵應該對每個條目都是唯一的,與第二個條目相同的pk肯定會給出該例外。 – kirti

回答

1

根據您的問題

When for the second time operations data entry (Same PK) takes place with this problem : org.hibernate.exception.ConstraintViolationException: 

您試圖插入相同的主鍵兩次。 你不能有相同的主鍵在數據庫中的兩個條目。

主鍵必須包含UNIQUE值。 檢查鏈接 http://www.w3schools.com/sql/sql_primarykey.asp

保持主鍵唯一,你不會得到這個異常。 如果你需要重複的條目爲coloumn那麼不要使它成爲一個主鍵

要自動生成的ID

@Id @GeneratedValue(策略= GenerationType.AUTO) @Column(name = 「\」 ID \「」) private int id;

+0

主鍵是BO中的序列,當我插入第二次操作時就會發生數據輸入與此問題相同的PK –