Tengo las siguientes clases de entidad JPA (caso de ejemplo). Una casa pertenece a una sola calle. Una calle tiene muchas casas.Hibernate genera una consulta SQL no válida con MySQL
@Entity
public class House {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Integer id;
public String name
@ManyToOne
public Street street;
}
@Entity
public class Street {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Integer id;
@OneToMany(mappedBy="street")
public Set<House> houses;
}
Tengo el tipo de generación configurado en identidad, que se supone que asigna automáticamente una nueva ID.
Al crear una nueva casa con una nueva calle, primero tengo que crear y conservar Street, seguido de House. Esto se debe a que no tengo CascadeType configurado para PERSIST, por lo que debe hacerse manualmente [1]. Sin embargo, mientras que la inserción de una calle de nueva creación:
Street street = new Street();
entityManager.persist(street);
Hibernate/JPA genera la siguiente consulta SQL:
insert into Street default values
la que MySQL no le gusta.
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'default values' at line 1
Cualquier idea por qué? Estoy usando Java 6, MySQL 5.0.67 con la implementación de JPA de Hibernate (versión 3.2.1.ga).
[1] EJB 3 en las páginas 318-319 de acción
Gracias, ahorraron mis horas de trabajo duro. – Heisenberg
Estaba usando 'clave' y 'valor' como nombres de columna. Woops. –