休眠:持久对象
问题描述:
我想创建新的事件对象,通过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>
答
你发生器类别是 “分配”,意思是休眠将采取ID “原样” - 例如它会假设你你正在设置它。
看看Hibernate支持的various generator classes。如果你想自动生成你的ID,最常见的方法是“身份”(如果你的数据库支持它)或“序列”。
查看Event的映射将有助于(.hbm.xml或带注释的类)。你有没有为它的ID指定一个生成器? – ChssPly76 2009-11-08 03:05:21
我在上面的问题中添加了休眠文件中的类定义。 – jds2501 2009-11-08 03:21:39