2014-01-20 5 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 

Это не только таблица в базы данных, и мне удалось сопоставить другие классы с использованием того же метода, поэтому я немного зациклен на том, почему это вызывает проблему.

Спасибо за ваше время, Samuel Smith

EDIT: В ответ на комментарий Хави, я временно удален другое отображение для столбца, и ошибка ушла, так что плохо яйцо, вероятно, лежит в следующем код:

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

Кажется, Hibernate ищет столбец с именем 'distributionCompanyID_distributionCompanyID'. Имеет ли этот объект другие сопоставления (например, ассоциации с другими объектами)? Вы пытались оставить только сопоставление для этого столбца, чтобы убедиться, что это тот, который приносит ошибку? Если он работает нормально только с отображением для 'distributionCompanyId', отправьте полное сопоставление объекта. –

+0

Какую стратегию @Generatedvalue вы хотите использовать. Действительно ли DEFAULT является AUTO? –

+0

@ XaviLópez - Вы привели меня по правильному пути, см. Мое редактирование. Спасибо :) –

ответ

8

Hibernate ищет колонку с именем distributionCompanyID_distributionCompanyID в вашем distributionCompanies таблице.

Возможно, из-за ассоциации ассоциации ToOne в направлении этой таблицы без @JoinColum.

От Hibernate Documentation:

Атрибут @JoinColumn не является обязательным, значение по умолчанию (s), как в один к одному, конкатенация имени отношений в сторону владельца, _ (подчеркивание) , и имя столбца первичного ключа в принадлежащей стороне. В этом примере company_id, поскольку имя свойства - компания, а идентификатор столбца компании - id.

Если у вас есть отображение ассоциации @ManyToOne или @OneToOne в другой организации, это могло бы объяснить, почему Hibernate ищет такой столбец.

EDIT Видя отображение ассоциации вас в курсе, это выглядит, как это должно быть:

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

@JoinTable аннотаций используется для указания таблицы объединения (что означает промежуточную таблицу, используемую для моделирования многих в - множество ассоциаций). А точкой сопоставления ассоциации будет удаление экземпляра сопоставленного объекта (в данном случае DistributionCompany, а не только distributionCompanyId).

Смежные вопросы