Hibernate异常:缺少列(列存在)

时间:2014-01-20 15:14:53

标签: java sql hibernate

好的,所以在数据库中我们有一个名为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;

1 个答案:

答案 0 :(得分:8)

Hibernate正在distributionCompanyID_distributionCompanyID表中查找名为distributionCompanies的列。

这可能是由于ToOne关联映射到此表而没有@JoinColum

来自Hibernate Documentation

  

@JoinColumn属性是可选的,默认值类似于一对一,所有者端关系名称的串联,_(下划线)和主键列的名称拥有的一方。在此示例中为company_id,因为属性名称为company,而Company的列ID为id。

如果你在另一个实体中有@ManyToOne@OneToOne关联映射,这可以解释为什么Hibernate正在寻找这样一个列。

编辑查看您发布的关联映射,看起来应该是:

@ManyToOne(targetEntity = DistributionCompany.class)
@JoinColumn(name = "distributionCompanyID")
private DistributionCompany distributionCompany;

@JoinTable注释用于指定连接表(这意味着用于建模多对多关联的中间表)。映射关联的关键是处理映射的对象实例(在本例中为DistributionCompany,而不仅仅是distributionCompanyId)。