Я пытаюсь сохранить очень простое отношение однонаправленного от одного до большого, но EclipseLink (2.3.1) терпит неудачу.
Класс обслуживания (родительский):
@Entity
@Table(name = "tbl_service2")
public class Service implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="service_id")
public long serviceID;
@Column(name="name")
public String name;
@OneToMany(cascade={CascadeType.ALL})
@JoinColumn(name="service_id", referencedColumnName="service_id")
public Set<Parameter> parameters;
}
Класс параметров (ребенок):
(Конечно, в базе данных есть поле "service_id" внешнего ключа, которое не представлено в классе, поскольку это однонаправленное отношение).
@Entity
@Table(name = "tbl_service_parameters2")
public class Parameter implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="param_id")
public long parameterID;
@Column(name="name")
public String name;
}
И это код для сохранения сущностей:
Service service = new Service();
service.parameters = new HashSet<Parameter>();
service.name = "test";
Parameter param = new Parameter();
param.name = "test";
service.parameters.add(param);
em.persist(service);
em.flush();
Я получаю это исключение:
Internal Exception: java.sql.SQLException: Field 'service_id' doesn't have a default value
Error Code: 1364
Call: INSERT INTO tbl_service_parameters2 (name) VALUES (?)
bind => [test]
РЕДАКТИРОВАТЬ: Поле базы данных service_id
имеет (и должно иметь) непустое ограничение из-за характера данных.
Является ли это ошибкой или что-то не так в коде?