У меня есть следующие классы сущностей 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