【发布时间】:2014-12-29 11:37:47
【问题描述】:
我是 Hibernate 开发的新手,遇到以下问题。
我有 2 个实体类映射 2 个数据库表:
1) 第一个实体类(主要的)名为KM_ProjectInfo,并映射一个名为KM_PROJECT的数据库表。
2) 第二个实体类名为KM_ProjectInfoStatus,并映射一个名为KM_PROJECT_INFO_STATUS的数据库表。
所以第二个表示第一个的特定字段(由 KM_ProjectInfo 类的实例表示的行的状态)。事实上我有这样的事情:
1) KM_ProjectInfo 类:
@Entity
@Table(name = "KM_PROJECT")
public class KM_ProjectInfo implements Serializable {
@Id
@GeneratedValue
private Long idProjectInfo;
@Column(name = "name")
private String name;
@Column(name = "technology")
private String technology;
@ManyToOne
@JoinColumn(name = "idCountry")
private KMCountry country;
@Column(name = "power")
private long power;
@Column(name = "cod")
private String cod;
@ManyToOne
@JoinColumn(name = "idProjectInfoStatus")
private KM_ProjectInfoStatus status;
// GETTERS & SETTERS
}
2) KM_ProjectInfoStatus:
@Entity
@Table(name = "KM_PROJECT_INFO_STATUS")
public class KM_ProjectInfoStatus implements Serializable {
@Id
@GeneratedValue
private Long idProjectInfoStatus;
@Column(name = "foldertech")
private Long foldertech;
@Column(name = "folderproject")
private Long folderproject;
// GETTERS & SETTERS
}
所以,正如您在前面的 sn-p 中看到的,KM_ProjectInfoStatuss 是 KM_ProjectInfo 的一个字段,因为我希望它包含该表的主键作为外键。
在我的应用程序的逻辑中,我希望在 KM_PROJECT 表的一行(因此在 KM_ProjectInfo 实体类的一个实例)关联一行KM_PROJECT_INFO_STATUS(KM_ProjectInfoStatus 实体类的一个实例),因为它代表 KM_PROJECT 行的特定状态。
在我的代码中:
@ManyToOne
@JoinColumn(name = "idProjectInfoStatus")
private KM_ProjectInfoStatus status;
但我认为这是错误的,因为在我的第一个表的一行中,它与第二个表的特定单行相关联。但也许我错过了有关 Hibernate 工作原理的一些信息。
你能帮我理解我缺少什么吗?它有什么作用?为什么我使用 @ManyToOne 而不是 @OneToOne?
Tnx
【问题讨论】:
标签: java entity-framework hibernate orm hibernate-mapping