好的,所以在数据库中我们有一个名为distributionCompanies的表,就像这样创建:
CREATE TABLE `distributionCompanies` (
`distributionCompanyID` INT(11) NOT NULL,
`distributionCompanyName` VARCHAR(255) NOT NULL,
PRIMARY KEY (distributionCompanyID)
);
我正在尝试使用Hibernate将此表映射到一个类:
@Entity
@Table(name = "distributionCompanies")
public class DistributionCompany implements DatabaseObject {
@Id
@GeneratedValue
@Column(name = "distributionCompanyID", length = 11, unique = true, nullable = false)
private int distributionCompanyID;
....
但是,在运行时,我遇到了这个问题:
Initial SessionFactory creation failedorg.hibernate.HibernateException: Missing column: distributionCompanyID_distributionCompanyID in database2.distributionCompanies
这不是数据库中唯一的表,我已经设法使用相同的方法成功映射其他类,所以我有点难过为什么这会导致问题。
感谢您的时间, 塞缪尔史密斯
编辑:为了回应Xavi的评论,我暂时删除了该列的另一个映射,错误消失了,所以坏蛋可能会出现在以下代码中:
@ManyToOne(targetEntity = DistributionCompany.class)
@JoinTable(name = "distributionCompanies", joinColumns = { @JoinColumn(name = "distributionCompanyID", nullable = false) })
private int distributionCompanyID;
答案 0 :(得分:8)
Hibernate正在distributionCompanyID_distributionCompanyID
表中查找名为distributionCompanies
的列。
这可能是由于ToOne
关联映射到此表而没有@JoinColum
。
@JoinColumn属性是可选的,默认值类似于一对一,所有者端关系名称的串联,_(下划线)和主键列的名称拥有的一方。在此示例中为company_id,因为属性名称为company,而Company的列ID为id。
如果你在另一个实体中有@ManyToOne
或@OneToOne
关联映射,这可以解释为什么Hibernate正在寻找这样一个列。
编辑查看您发布的关联映射,看起来应该是:
@ManyToOne(targetEntity = DistributionCompany.class)
@JoinColumn(name = "distributionCompanyID")
private DistributionCompany distributionCompany;
@JoinTable
注释用于指定连接表(这意味着用于建模多对多关联的中间表)。映射关联的关键是处理映射的对象实例(在本例中为DistributionCompany
,而不仅仅是distributionCompanyId
)。