2009-11-08 139 views
1

我想創建新的事件對象,通過Hibernate在數據庫中保存。下面的代碼成功創建了一個事件,但是當session.save(evt)被調用時,我得到的返回值爲0(我認爲這相當於null)。任何人都可以確定下面的問題是什麼?如果您需要有關涉及類或hibernate映射文件的更多信息,請請求您的需求。休眠:持久對象

注意:假設數據庫中存在事件表。

public class ScheduleUnitOfWork { 
private Map<Service, Employee> assignments; 
private Date startDate; 
private Date endDate; 
private String customerName; 

public ScheduleUnitOfWork(Map<Service, Employee> assignments, Date startDate, 
          Date endDate, String customerName) { 
    super(); 

    this.assignments = assignments; 
    this.startDate = startDate; 
    this.endDate = endDate; 
    this.customerName = customerName; 
} 

public boolean scheduleEmployees(){ 
    Session session = SessionFactoryUtil.getInstance().getCurrentSession(); 
    Transaction tx = null; 
    boolean retVal = true; 

    try { 
     tx = session.beginTransaction(); 

     for(Service s : assignments.keySet()){ 
      Employee e = assignments.get(s); 

      Event evt = new Event(); 
      evt.setAssignedService(s); 
      evt.setCustomerName(this.customerName); 
      evt.setEndDate(endDate); 
      evt.setStartDate(startDate); 

      System.out.println(session.save(evt)); 
     } 

     tx.commit(); 

    }catch(RuntimeException ex){ 
     ex.printStackTrace(); 

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

     retVal = false; 
    } 

    return retVal; 
} 

}

<class name="Event" table="Events"> 
    <id name="ID" column="ID" type="int"> 
     <generator class="assigned"/> 
    </id> 
    <property name="startDate" column="startDate" type="timestamp"/> 
    <property name="endDate" column="endDate" type="timestamp"/> 
    <property name="customerName" column="customerName" type="string"/> 
    <many-to-one name="assignedService" column="serviceID" 
       class="org.hibernate.service.Service" 
       unique="true" not-null="true"/> 

</class> 

+0

查看Event的映射將有助於(.hbm.xml或帶註釋的類)。你有沒有爲它的ID指定一個生成器? – ChssPly76 2009-11-08 03:05:21

+0

我在上面的問題中添加了休眠文件中的類定義。 – jds2501 2009-11-08 03:21:39

回答

2

你發生器類別是 「分配」,意思是休眠將採取ID 「原樣」 - 例如它會假設你正在設置它。

看看Hibernate支持的various generator classes。如果你想自動生成你的ID,最常見的方法是「身份」(如果你的數據庫支持它)或「序列」。

+0

我將生成器類更改爲標識,並且我看到保存返回正在遞增的非零值。但是,我仍然沒有看到數據庫表得到更新。我嘗試刷新會話緩衝區,但沒有奏效。有任何想法嗎? – jds2501 2009-11-08 03:40:13

+0

如果您從「身份」中獲取一個id,這意味着插入了行**,但事務隨後會回滾。您在任何時候提交交易時是否收到錯誤信息? – ChssPly76 2009-11-08 03:44:03

+0

發現錯誤:在我使用的MySQL查詢瀏覽器中,我忘了刷新瀏覽器的視圖。活動現在正在增加,謝謝! – jds2501 2009-11-08 04:13:01