2010-06-23 1 views
2

Je reçois une exception lorsque je tente de sauver des données à travers la couche de persistance de mise en veille prolongée, l'exception estHibernate | Identifiant génération Exception

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

que vous pouvez voir la classe se voir attribuer différentes dans les endroits appropriés, je suis confus au sujet de l'exception, en attendant de l'aide ..

Répondre

2

Le message d'exception ids for this class must be manually assigned before calling save() est explicite. Cela se produit parce que vous utilisez le générateur intégré assigned. Le générateur assigned indique explicitement à Hibernate que l'application va affecter l'identifiant. Dans la section 5.1.4.1. Generator:

permet l'application affecter un identifiant à l'objet avant save() est appelé. C'est la stratégie par défaut si aucun élément <generator> n'est spécifié.

Si ce n'est pas ce que vous voulez, utilisez un autre générateur, par exemple native (ce sélectionne identity, sequence ou hilo en fonction des capacités de la base de données sous-jacente):

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

L'exception indique que vous n'avez aucune valeur affectée au champ marqué avec @id dans la classe Employee. A quoi ressemble cette classe? Essayez-vous de générer les valeurs Id via l'un des générateurs fournis ou souhaitez-vous les définir manuellement?

+0

il est réglé sur class = « Assigned » dans le fichier .hbm – Switch

+0

@MMRUser pouvez-vous préciser quel champ est marqué comme « id » dans votre cartographie? –

+0

empCode est marqué comme ID – Switch

0

Utilisation suivant le type de code pour sauver l'employé si cela n'est pas utile s'il vous plaît coller le fichier de cartographie pour connaître les détails de champ 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();