Hibernate 一对多注解映射

rob*_*bin 1 java hibernate

嗨,我有一张如下所示的两张桌子。

1) 任务 - id,name 2) 资源 - id,name,defaultTask(Task.id 的外键)

映射是一对多的——一个任务可以有很多资源。

Task 的代码如下所示。

@Entity
public class Task implements Serializable {
private long m_id;
private String m_name;

@Id
@GeneratedValue(
    strategy = GenerationType.AUTO
)
public long getId() {
    return this.m_id;
}

public void setId(long id) {
    this.m_id = id;
}

public String getName() {
    return this.m_name;
}

public void setName(String name) {
    this.m_name = name;
}

@OneToMany
@JoinColumn(
    name = "defaultTask"
)
private List<Resource> m_relatedResources;

public List<Resource> getrelatedResources() {
    return m_relatedResources;
}


public void setrelatedResources(List<Resource> relatedResources) {
    m_relatedResources = relatedResources;
}
Run Code Online (Sandbox Code Playgroud)

Resource 类的代码如下所示。

@Entity
public class Resource implements Serializable {
private Long m_id;
private String m_name;
@Id
@GeneratedValue(
    strategy = GenerationType.AUTO
)
public Long getId() {
    return this.m_id;
}

public void setId(Long id) {
    this.m_id = id;
}

public String getName() {
    return this.m_name;
}

public void setName(String name) {
    this.m_name = name;
}
Task m_task;
@ManyToOne
@JoinColumn(
    name = "defaultTask"
)
public Task getTask() {
    return this.m_task;
}

public void setTask(Task task) {
    this.m_task = task;
}
Run Code Online (Sandbox Code Playgroud)

}

当我执行它时,我收到类似的错误

初始 SessionFactory 创建失败.org.hibernate.MappingException:无法确定类型:java.util.List,列:[org.hibernate.mapping.Column(relatedResources)]

我做错了什么?我该如何解决这个问题?

Vir*_*ade 5

您不能随机地将注释应用于方法或字段。通常,您应该以与@Id 相同的方式应用您的注释。

在任务类 OneToMany 应该像

@OneToMany
@JoinColumn(
    name = "defaultTask"
)
public List<Resource> getrelatedResources() {
    return m_relatedResources;
}
Run Code Online (Sandbox Code Playgroud)

字段访问策略(由@Id 注释确定)。将任何与 JPA 相关的注释放在每个方法之上,而不是字段/属性之上,因为您的 id 位于方法之上,它会让您远离异常。
此外,@PredragMaric 提出的双向映射似乎存在问题,因此您需要使用 MappedBy,它向休眠发出信号,表明关系的关键在另一侧。单击Mapped by上的一个非常好的问题。