У меня есть следующие классы сущностей JPA (пример case). Дом принадлежит одной улице. У улицы много домов.
@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 с введением Hibernate JPA (версия 3.2.1.ga).
[1] EJB 3 в действии страницы 318-319