Составной ключ Hibernate: внешний ключ имеет неправильное количество столбцов - PullRequest
2 голосов
/ 27 августа 2010

Я новичок в Hibernate и JPA, и мне сложно настроить составной ключ, как указано ниже:

@Entity 
@Table(name = Entity.TABLE) 
@IdClass(EntityPK.class) 
public class MyEntity extends Entity {

        @CollectionOfElements
        @JoinTable(name="items",
            joinColumns = @JoinColumn(name="items"))
        private List<String> items;

        @Id
        private Type type;

        @Id
        private Level level;
   // plus standard constructors/getters/setters
}


public class EntityPK implements Serializable {

    private Type type;

    private Level level;

   // plus standard constructors/getters/setters
}

Когда я запускаю свои тесты dbunit, я получаю следующую ошибку:

Причина: org.hibernate.AnnotationException: Внешний ключ, ссылающийся на com.tnt.sech.domain.management.ReasonList из com.tnt.sech.domain.management.ReasonList, имеет неправильный номер столбца.должно быть 2

Пожалуйста, напишите, если вы видите, где я иду не так!

1 Ответ

3 голосов
/ 28 августа 2010

По моему мнению, проблема в том, что вы не можете использовать сложные типы, такие как Type и Level (не уверены, что они есть), в качестве поля или свойства вашего составного ключа.Из спецификации JPA:

2.1.4 Первичные ключи и идентификационные данные сущности

...

Первичный ключ (или поле или свойство составного первичного ключа) должен быть одного из следующих типов: любой тип примитива Java;любой примитивный тип обертки;java.lang.String;java.util.Date;java.sql.Date.В целом, однако, приблизительные числовые типы (например, типы с плавающей запятой) никогда не должны использоваться в первичных ключах.Объекты, первичные ключи которых используют другие типы, не будут переносимыми.Если используются сгенерированные первичные ключи, переносимы будут только целые типы.Если java.util.Date используется в качестве поля или свойства первичного ключа, временный тип должен быть указан как DATE.

Что именно они (перечисления?)?

ОтдельноИсходя из этого, подход к сопоставлению самого составного ключа в порядке (см. связанный вопрос ниже).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...