嗨,我有一张如下所示的两张桌子。
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)]
我做错了什么?我该如何解决这个问题?
您不能随机地将注释应用于方法或字段。通常,您应该以与@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上的一个非常好的问题。
| 归档时间: |
|
| 查看次数: |
586 次 |
| 最近记录: |