【问题标题】:Hibernate Exception: Missing Column (column exists)休眠异常:缺少列(列存在)
【发布时间】:2014-01-20 15:14:52
【问题描述】:

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

【问题讨论】:

  • Hibernate 似乎正在寻找一个名为 distributionCompanyID_distributionCompanyID 的列。该实体是否有其他映射(例如与其他实体的关联)?您是否尝试只保留此列的映射以确保它是导致错误的那个?如果它仅适用于 distributionCompanyId 的映射,请发布实体的完整映射。
  • 您想使用什么@Generatedvalue 策略。真的是 DEFAULT 是 AUTO 吗?
  • @XaviLópez - 你让我走上了正确的道路,请参阅我的编辑。谢谢你:)
  • @Samuel 确实,我已经写了一个关于这个的答案。

标签: java sql hibernate


【解决方案1】:

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

这可能是由于在没有@JoinColum 的情况下对该表的ToOne 关联映射。

来自Hibernate Documentation

@JoinColumn 属性是可选的,默认值是一对一的,所有者侧的关系名称,_(下划线)和主键列的名称串联拥有的一方。在这个例子中 company_id 因为属性名称是 company 并且 Company 的列 id 是 id。

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

EDIT看到你发布的关联映射,看起来应该是:

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

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

【讨论】:

    猜你喜欢
    • 2016-10-08
    • 2013-11-17
    • 2016-05-04
    • 2018-07-21
    • 2016-04-21
    • 1970-01-01
    • 2012-11-17
    • 2011-02-14
    • 2019-09-29
    相关资源
    最近更新 更多