0

У меня есть два класса сущностей.от одного до многих двунаправленных сопоставлений, не имеющих ошибки по умолчанию

@Entity 

общественного класса Employee {

@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 

общественного класса Skill {

@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; 
} 

}

Если оба они были UNI-Directional, я могу сэкономить сотруднику-объекту-специалисту.

сейчас, когда я попытался сделать это BI-Directional, я получаю сообщение об ошибке SQL, говоря, что Field 'skill_id' doesn't have a default value

Я понятия не имею, где я сделал это неправильно. Не могли бы вы указать.

ответ

1

У вас нет двунаправленной ассоциации OneToMany. У вас есть две независимые ассоциации, сопоставленные с одной и той же таблицей соединений. Двунаправленная ассоциация должна иметь сторону (с одной стороны, в данном случае), который является обратной стороной ассоциации, благодаря mappedBy атрибуту:

@OneToMany(cascade = CascadeType.ALL, mappedBy = "employee") 
private Collection<Skill> listSkill; 
+1

не должен аннотации быть @ManyToMany? –

+1

@ Sõber Это зависит от того, может ли скилл использоваться несколькими сотрудниками или нет. ОП определил его как OneToMany, поэтому я думаю, это то, что он/она хочет. –

+0

@ Sõber Благодарим вас за ввод. Да, в моих требованиях он должен иметь возможность искать Работника по навыкам. Итак, я думаю, что ваша идея имеет больше смысла, чем моя. +1 – yas