No se ha podido recuperar la clave generada automáticamente en Hibernate
-
13-10-2019 - |
Pregunta
He creado una tabla simple, como a continuación.
CREATE TABLE CUSTOMERS
(
CUST_ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),
CUSTOMER_NAME VARCHAR(24) NOT NULL,
REGION VARCHAR(26),
PRIMARY KEY (CUST_ID)
);
A continuación, he creado una asignación para esta tabla con este archivo de asignación
<class name="Customer" table="CUSTOMERS">
<id type="int" column="CUST_ID" >
<generator class="native"></generator>
</id>
<property name="customerName" type="string" column="CUSTOMER_NAME" />
<property name="region" type="string" column="REGION"/>
</class>
Entonces creé una clase simple, como a continuación para acceder a la base de datos.
public class CustomerDao {
public void addCustomer(Customer customer) {
Session session = SessionManager.getSessionFactory()
.getCurrentSession();
session.beginTransaction();
session.saveOrUpdate(customer);
session.getTransaction().commit();
}
public List<Customer> getAllCustomer() {
Session session = SessionManager.getSessionFactory()
.getCurrentSession();
session.beginTransaction();
List<Customer> booksList = session.createQuery("from Customer").list();
session.getTransaction().commit();
return booksList;
}
}
La clase de cliente es sólo un POJO
public class Customer {
private int customerID;
private String customerName;
private String region;
//getters setters
}
Pero no se une a la clave generada en la mesa.
public class Starter {
public static void main(String[] args) {
List<Customer> lstCust = daoCust.getAllCustomer();
for (Customer cust : lstCust) {
System.out.println(cust);
}
}
}
La salida es como estos?
Customer Details:
------------
Customer ID:0
Customer Name: Symera
Region:Asia
Customer Details:
------------
Customer ID:0
Customer Name: Indra
Region:US
Customer Details:
------------
Customer ID:0
Customer Name:Istaf
Region:US
¿Me he perdido algo en el mapeo? Añadiendo cliente tiene ningún problema, pero la recuperación de la clave generada automáticamente tiene.
Solución
I think the missing name attribute for id tag in you hbm file could be the issue:
<id type="int" column="CUST_ID" name="customerID">
<generator class="native"></generator>
</id>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow