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

Sam*_*ith 4 java sql hibernate

好的,所以在数据库中我们有一个名为distributionCompanies的表,就像这样创建:

CREATE TABLE `distributionCompanies` (
    `distributionCompanyID` INT(11) NOT NULL,
    `distributionCompanyName` VARCHAR(255) NOT NULL,
     PRIMARY KEY (distributionCompanyID)
);
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Hibernate将此表映射到一个类:

@Entity
@Table(name = "distributionCompanies")
public class DistributionCompany implements DatabaseObject {
    @Id
    @GeneratedValue
    @Column(name = "distributionCompanyID", length = 11, unique = true, nullable = false)
    private int distributionCompanyID;
....
Run Code Online (Sandbox Code Playgroud)

但是,在运行时,我遇到了这个问题:

Initial SessionFactory creation failedorg.hibernate.HibernateException: Missing column: distributionCompanyID_distributionCompanyID in database2.distributionCompanies
Run Code Online (Sandbox Code Playgroud)

这不是数据库中唯一的表,我已经设法使用相同的方法成功映射其他类,所以我有点难过为什么这会导致问题.

谢谢你的时间,塞缪尔史密斯

编辑:为了回应Xavi的评论,我暂时删除了该列的另一个映射,错误消失了,所以坏蛋可能在下面的代码中:

@ManyToOne(targetEntity = DistributionCompany.class)
@JoinTable(name = "distributionCompanies", joinColumns = { @JoinColumn(name =    "distributionCompanyID", nullable = false) })
private int distributionCompanyID;
Run Code Online (Sandbox Code Playgroud)

Xav*_*ica 8

Hibernate是寻找一个名为列distributionCompanyID_distributionCompanyIDdistributionCompanies表中.

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

来自Hibernate文档:

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

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

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

@ManyToOne(targetEntity = DistributionCompany.class)
@JoinColumn(name = "distributionCompanyID")
private DistributionCompany distributionCompany;
Run Code Online (Sandbox Code Playgroud)

@JoinTable注释被用来指定一个连接表(这意味着用于许多-to-many关联模型中的中间表).映射关联的关键是处理映射的对象实例(在本例中为a DistributionCompany,而不仅仅是a distributionCompanyId).