2009-11-08 3 views
1

Я пытаюсь создать новые объекты событий, которые будут сохраняться в базе данных с помощью Hibernate. В приведенном ниже коде успешно создается одно событие, но когда вызывается session.save (evt), я получаю возвращаемое значение 0 (что, я думаю, эквивалентно нулю). Может ли кто-нибудь определить, что проблема ниже? Если вам нужна дополнительная информация о связанных с классами или файлах отображения гибернации, запросите, что вам нужно.Спящий режим: сохраняющиеся объекты

Примечание. Предположим, что в базе данных существует таблица событий.

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

Проведение сопоставления для события поможет (.hbm.xml или аннотированный класс). Вы указали генератор для своего идентификатора? – ChssPly76

+0

Я добавил определение класса в файл спящего режима на вопрос выше. – jds2501

ответ

2

Ваш класс генератор "назначен" означает Hibernate будет принимать идентификатор "как есть", - например, он примет вы устанавливаете его.

Посмотрите на various generator classes, поддерживаемый Hibernate. Если вы хотите, чтобы ваш идентификатор был автоматически сгенерирован, наиболее распространенными подходами являются «идентификация» (если ваша база данных поддерживает его) или «последовательность».

+0

Я изменил класс генератора на идентификатор, и я вижу, как сохранить возвращаемое ненулевое значение, которое увеличивается. Тем не менее, я до сих пор не вижу, чтобы обновлялась таблица базы данных. Я попытался очистить буфер сессии, но это не сработало. Есть идеи? – jds2501

+0

Если вы возвращаете идентификатор из «identity», что означает, что строка ** была вставлена ​​**, но транзакция впоследствии откат. Получаете ли вы какие-либо ошибки, когда совершаете транзакцию? – ChssPly76

+0

Обнаружили ошибку: В браузере запросов MySQL, который я использовал, я забыл обновить свое представление обозревателя. События теперь добавляются, спасибо! – jds2501

Смежные вопросы