Spring JPA @OneToMany El valor del parámetro [] no coincide con el tipo esperado
Obtengo este error al solicitar la línea de servicio:
List<order> orders = ordersRepository.getByCustomerId(id);
Error:
org.springframework.dao.InvalidDataAccessApiUsageException: El valor del parámetro [5] no coincide con el tipo esperado [nz.webshop.models.Customer.Customers (n/a)]; la excepción anidada es java.lang.IllegalArgumentException: El valor del parámetro [5] no coincide con el tipo esperado [nz.webshop.models.Customer.Customers (n/a)]
Repositorio:
public interface OrdersRepository extends JpaRepository<order, integer=""> {
List<order> getByCustomerId(Integer customerId);
}
Entidades:
@EntityA:
@Table(name = "orders")
public class Order {
@ManyToOne(targetEntity = Customers.class)
@JoinColumn(name = "customer_id", referencedColumnName = "customer_id")
private Integer customerId;
...getters/setters
}
@EntityB:
@Table(name = "customer")
public class Customers {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "customer_id")
private Integer customerId;
@OneToMany(targetEntity = Order.class, mappedBy = "customerId")
private List<order> Order;
...getters/setters
}
Donde las tablas son así:
CREATE TABLE orders
(
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customer (customer_id)
);
CREATE TABLE customer
(
customer_id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50)
);
Actualización:
He cambiado la entidad EntityA de la siguiente manera:
@EntityA:
@Table(name = "orders")
public class Order {
@Column(name = "customer_id")
private Integer customerId;
@ManyToOne(targetEntity = Customers.class)
private Customer customer;
...getters/setters
}
Pero luego, al solicitar la misma línea de servicio, obtengo un nuevo error: org.springframework.dao.InvalidDataAccessResourceUsageException: no se pudo extraer el conjunto de resultados; SQL [n/a]; la excepción anidada es org.hibernate.exception.SQLGrammarException: no se pudo extraer el conjunto de resultados. Com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Columna desconocida ‘order0.customer_customer_id’ en ‘lista de campos’.
¿Dónde podría estar el problema?</order,>
davy.ai
El problema parece encontrarse en el mapeo de la anotación
@JoinColumn
en la claseOrder
de la entidad A. Deberías actualizar la anotación@JoinColumn
de la siguiente manera:Esto asegurará que la columna
customer_id
en la tablaorders
se mapee correctamente al campocustomerId
en la claseOrder
de la entidad A.Una vez que realices este cambio, también debes actualizar la anotación
@ManyToOne
en la claseOrder
de la entidad A para que se mapee a la entidadCustomers
:Al especificar los atributos
targetEntity
yfetch
, le estás indicando a Hibernate que mapee la columnacustomer_id
en la tablaorders
al campocustomerId
en la claseCustomers
de la entidad B.Finalmente, debes actualizar la anotación
@OneToMany
en la claseCustomers
de la entidad B para que se mapee al campocustomer
en la claseOrder
de la entidad A:Al especificar el atributo
mappedBy
, le estás indicando a Hibernate que mapee el campocustomer
en la claseOrder
de la entidad A al campoorders
en la claseCustomers
de la entidad B.Con estos cambios, deberías poder recuperar los pedidos por el ID del cliente sin encontrar errores.