Спящий | Исключение генерации идентификатора - PullRequest
2 голосов
/ 23 июня 2010

Я получаю исключение при попытке сохранить некоторые данные через постоянный слой гибернации, исключение составляет

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();
    }

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

Ответы [ 3 ]

4 голосов
/ 23 июня 2010

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

2 голосов
/ 23 июня 2010

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

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

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

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

<class name="LineItem" table="`Line Item`">
  <id name="id" column="`Item Id`"/>
    <generator class="native"/>
  </id>
  ...
</class>
0 голосов
/ 23 июня 2010

Используйте следующий вид кода, чтобы сохранить сотрудника, если это бесполезно. Вставьте файл сопоставления, чтобы узнать подробности поля 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...