我有两个实体类。
@Entity
公共(public)类员工{
@Id
@Column(name = "employee_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(name = "employee_skill", joinColumns = @JoinColumn(referencedColumnName = "employee_id"), inverseJoinColumns = @JoinColumn(referencedColumnName = "skill_id"))
private Collection<Skill> listSkill;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Collection<Skill> getListSkill() {
return listSkill;
}
public void setListSkill(Skill skill) {
if (listSkill == null) {
listSkill = new ArrayList<Skill>();
}
listSkill.add(skill);
}
}
@Entity
公开课技能{
@Id
@Column(name = "skill_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String name;
@ManyToOne(cascade = CascadeType.ALL)
@JoinTable(name = "employee_skill", joinColumns = @JoinColumn(referencedColumnName = "skill_id", insertable = false, updatable = false), inverseJoinColumns = @JoinColumn(referencedColumnName = "employee_id", insertable = false, updatable = false))
private Employee employee;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}
当它们都是单向时,我可以保存与技能关联的员工对象。
现在,当我尝试使其成为双向时,我收到 sql 错误,指出字段“skill_id”没有默认值
我不知道我哪里做错了。请您指出。
最佳答案
这里没有双向 OneToMany 关联。您有两个独立的关联映射到同一个连接表。双向关联必须有一侧(在本例中为一侧),这是关联的反面,这要归功于 mappedBy
属性:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "employee")
private Collection<Skill> listSkill;
关于mysql - 一对多双向映射提示没有默认值错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32295887/