我有spring boot rest api,我成功保存了1个表,但是当我尝试保存具有2个其他关系的对象时却出现错误:
o.h.engine.jdbc.spi.SqlExceptionHelper:SQL错误:1364,SQLState: HY000 o.h.engine.jdbc.spi.SqlExceptionHelper:字段“ id”没有默认值
这是我的实体和实体管理者的持久性:
@Entity
@Table(name="booking")
public class Booking {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private int id;
@Column(name="description")
private String description;
@OneToMany(mappedBy="booking",cascade = CascadeType.ALL)
private List<CategoriesBooking> bookingInfos = new ArrayList<>();
@Entity
@Table(name="category_booking")
public class CategoriesBooking {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private int id;
@Column(name = "name")
private String name;
@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name="booking_id")
private Booking booking;
@OneToMany(mappedBy="categoriesBooking",cascade = CascadeType.ALL)
private List<OptionsBooking> options = new ArrayList<>();
@Entity
@Table(name="options_booking")
public class OptionsBooking {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="id")
private int id;
@Column(name="name")
private String name;
@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
@JoinColumn(name = "catebooking_id")
private CategoriesBooking categoriesBooking;
@Transactional
@Repository
public class Services{
@PersistenceContext
protected EntityManager entityManager;
public Services() {
}
public boolean add(Booking booking){
try {
entityManager.persist(booking);
return true;
} catch (Exception e) {
entityManager.getTransaction().rollback();
}
return false;
}
}
数据:
{description: 'test for persist',
bookingInfos:[{
name:'test1',
options:[{
name: 'test1-test1'
}]
}]
}
我更新为使用MySQL
答案 0 :(得分:2)
GenerationType.AUTO
选择适合您数据库的ID生成策略。它实际选择的内容取决于您使用的数据库。但是从错误消息来看,它假定id
列是某种IDENTITY
字段,该字段在插入时会创建一个唯一值。
似乎您的架构没有以这种方式声明id
列。
明显的解决方法是更改它。
答案 1 :(得分:0)
有时,即使执行SchemaUpdate
,对模型或ORM所做的更改也可能无法准确反映在数据库上。
如果错误实际上似乎缺乏合理的解释,请尝试重新创建数据库(或至少创建一个新数据库),并用SchemaExport
进行构架。