У меня есть следующие классы сущностей JPA (пример). Дом принадлежит одной улице. На улице много домов.
@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;
}
У меня установлен тип генерации для идентификации, который должен автоматически назначать новый идентификатор.
При создании нового дома с новой улицей я должен сначала создать и сохранить улицу, а затем дом. Это связано с тем, что у меня CascadeType не установлен в PERSIST, поэтому это нужно сделать вручную [1]. Однако при вставке вновь созданной улицы:
Street street = new Street();
entityManager.persist(street);
Hibernate/JPA генерирует следующий SQL-запрос:
insert into Street default values
что MySQL не любит.
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
Есть идеи, почему? Я использую Java 6, MySQL 5.0.67 с реализацией JPA в Hibernate (версия 3.2.1.ga).
[1] EJB 3 в действии, страницы 318-319