2014-01-20 52 views
4

好了,所以在数据库中有一个名为distributionCompanies表,像这样创建:Hibernate的异常:缺少列(列存在)

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 

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

谢谢您的时间, 塞缪尔·史密斯

编辑:在回答哈维的评论,我暂时删除该列另一个映射,错误走了,所以坏鸡蛋可能在以下规定代码:

@ManyToOne(targetEntity = DistributionCompany.class) 
@JoinTable(name = "distributionCompanies", joinColumns = { @JoinColumn(name = "distributionCompanyID", nullable = false) }) 
private int distributionCompanyID; 
+1

看来Hibernate正在寻找名为'distributionCompanyID_distributionCompanyID'的列。这个实体是否有其他映射(例如与其他实体的关联)?你有没有试过只留下这一列的映射,以确保它是一个引起错误的那个?如果只有'distributionCompanyId'的映射工作正常,请发布实体的完整映射。 –

+0

您想要使用的@Generatedvalue策略。它真的是AUTO的DEFAULT吗? –

+0

@XaviLópez - 你让我走了一条正确的道路,看到我的编辑。谢谢:) –

回答

8

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

这可能是由于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)。