【问题标题】:one to many bidirectional mapping complaining doesn't have a default value error一对多双向映射抱怨没有默认值错误
【发布时间】:2015-11-24 13:57:12
【问题描述】:

我有两个实体类。

@Entity

公共类员工{

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

}

当它们都是 UNI-Directional 时,我可以保存员工对象与技能关联。

现在,当我尝试使其成为双向时,我收到 sql 错误,提示 Field 'skill_id' doesn't have a default value

我不知道我在哪里做错了。请指出来。

【问题讨论】:

    标签: mysql hibernate mapping bidirectional bidirectional-relation


    【解决方案1】:

    这里没有双向 OneToMany 关联。您有两个独立的关联映射到同一个连接表。由于mappedBy 属性,双向关联必须有一个边(在本例中为一侧),它是关联的inverse 边:

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

    【讨论】:

    • 注解不应该是@ManyToMany吗?
    • @Sõber 这取决于一个技能是否可以由多个员工共享。 OP 将其定义为 OneToMany,所以我想这就是他/她想要的。
    • @Sõber 感谢您的意见。是的,在我的要求中,它必须能够按技能搜索员工。所以,我认为你的想法比我的更有意义。 +1
    猜你喜欢
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2011-12-15
    • 2018-12-21
    • 1970-01-01
    相关资源
    最近更新 更多