休眠:持久对象

问题描述:

我想创建新的事件对象,通过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

你发生器类别是 “分配”,意思是休眠将采取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