2010-06-23 3 views
2

я получаю исключение, когда я пытаюсь сохранить некоторые данные через Hibernate сохранение слоя, исключение составляетСпящий режим | Идентификатор поколение Исключения

org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): hbm.Employee 


public void saveEmployee(Employee empValue) { 
     Session session = null; 
     Transaction tx = null; 
     session = HibernateSessionFactory.getSession(); 
     tx = session.beginTransaction(); 
     Employee emp; 
     if (empValue.getEmpcode() != null) { 
      emp = (Employee) session.get(Employee.class, empValue.getEmpcode()); 
      if (emp != null) { 
       System.out.println("Test"); 
       emp.setEmpcode(empValue.getEmpcode()); 
       emp.setDepartment(createDepartment("DEEE")); 
       emp.setEmpfname(empValue.getEmpfname()); 
       emp.setEmplname(empValue.getEmplname()); 
       emp.setEmpdob(empValue.getEmpdob()); 
       emp.setEmpstatus(empValue.getEmpstatus()); 
       emp.setEmptelno(empValue.getEmptelno()); 
       emp.setAuditfield(empValue.getAuditfield()); 
       session.update(emp); 
      } 
     } else 
     { 
      emp = new Employee(); 
      emp.setEmpcode(empValue.getEmpcode()); 
      emp.setDepartment(createDepartment("DEEE")); 
      emp.setEmpfname(empValue.getEmpfname()); 
      emp.setEmplname(empValue.getEmplname()); 
      emp.setEmpdob(empValue.getEmpdob()); 
      emp.setEmpstatus(empValue.getEmpstatus()); 
      emp.setEmptelno(empValue.getEmptelno()); 
      emp.setAuditfield(empValue.getAuditfield()); 
      session.save(emp); 
     } 
     tx.commit(); 
    } 

как вы можете видеть класс получить назначения в соответствующих местах, я запутался о исключение, ожидающее некоторую помощь.

ответ

2

Сообщение об исключении ids for this class must be manually assigned before calling save() сам пояснил.

Это происходит потому, что вы используете встроенный генератор assigned. Генератор assigned явно указывает Hibernate, что приложение будет назначать идентификатор. В разделе 5.1.4.1. Generator:

позволяет приложению назначать идентификатор объекта перед тем save() называется. Это стратегия по умолчанию, если не указан элемент <generator>.

Если это не то, что вы хотите использовать другой генератор, например native (это выбирает identity, sequence или hilo в зависимости от возможностей основной базы данных):

<class name="LineItem" table="`Line Item`"> 
    <id name="id" column="`Item Id`"/> 
    <generator class="native"/> 
    </id> 
    ... 
</class> 
3

Исключение говорит, что у вас нет значения, присвоенного полю, отмеченному @id в классе Employee. Как выглядит этот класс? Вы пытаетесь генерировать значения Id через один из предоставленных генераторов или вы хотите установить их вручную?

+0

он установлен в класс = «назначенный» в .hbm файл – Switch

+0

@MMRUser вы можете уточнить, какое поле помечается как «идентификатор» в вашем отображении? –

+0

empCode отмечен как ID – Switch

0

использования следующий вид кода для сохранения сотрудника , если это не поможет, вставьте файл сопоставления, чтобы узнать подробности поля empCode.

helper = new HibernateHelper(); 
Customer custObject; 
if (customer.getId() == 0) { 
       custObject = new Customer(); 
       custObject.setCreatetimestamp(new Timestamp(System.currentTimeMillis())); 
      } else { 
       custObject = (Customer) helper.getSession().load(Customer.class, customer.getId()); 
      } 
      custObject.setName(customer.getName()); 
      custObject.setAddress(customer.getAddress()); 
      custObject.setBillToAddress(customer.getBillToAddress()); 
      custObject.setBillToPerson(customer.getBillToPerson()); 
      custObject.setUpdatetimestamp(new Timestamp(System.currentTimeMillis())); 
      custObject.setEmail(customer.getEmail()); 
      custObject.setDeleted(false); 
      Currency curr = (Currency) helper.getSession().load(Currency.class, x); 
      custObject.setCurrencyId(curr); 

      custId = (Long) helper.getSession().save(custObject); 
      helper.commit(); 
Смежные вопросы