org.hibernate.AnnotationException: коллекция не имеет ни универсального типа, ни OneToMany.targetEntity () - PullRequest
9 голосов
/ 04 августа 2011

Я использовал Инструменты Hibernate для создания моего отображения Hibernate POJO.

К сожалению, код, сгенерированный инструментами Hibernate, похоже, не работает, я получаю исключение

org.hibernate.AnnotationException: коллекция не имеет ни универсального типа, ни OneToMany.targetEntity ()

Части кода, которые генерируют исключение:

/**
 * ClassFlag generated by hbm2java
 */
@Entity
@Table(name = "class_flag", catalog = "incbszdb")
public class ClassFlag implements java.io.Serializable {

    ....
    /* HERE */
    private Set classFlagI18ns = new HashSet(0);

    /* HERE */
    public void setClassFlagI18ns(Set classFlagI18ns) {
      this.classFlagI18ns = classFlagI18ns;
    }

}  

Согласно этому посту

http://www.mkyong.com/hibernate/org-hibernate-annotationexception-collection-has-neither-generic-type-or-onetomany-targetentity/comment-page-1/#comment-67404

и этот пост

http://www.mkyong.com/hibernate/hibernate-error-collection-has-neither-generic-type-or-onetomany-targetentity/

Вы должны вручную изменить сгенерированный код Hibernates.

Это одна вещь, которую я хочу избежать. Есть идеи, в чем может быть проблема?

Привет

JS

Ответы [ 6 ]

14 голосов
/ 05 августа 2011

Я нашел для меня решение, которое работает.

Просто отметьте "Использовать синтаксис Java 5" , как показано на прилагаемом Снимке экрана, и Hibernate Tools генерирует правильные универсальные типы для коллекций.

enter image description here

8 голосов
/ 04 августа 2011

То, что говорят вам исключения, понятно - коллекция @OneToMany должна указывать конкретный тип (Set<AnotherEntity>) или иметь @OneToMany(targetEntity=AnotherEntity.class)

2 голосов
/ 29 сентября 2016

Использование Java 5 Синтаксис - правильный ответ ... но он очень обманчив.Должно быть Использовать Синтаксис Java 5+ .. кто подумает использовать Java 5.

1 голос
/ 30 июня 2016

Для тех, кому нужно.Насколько я помню, в Java EE 5 Java Enterprise Edition получила множество функциональных возможностей, особенно в использовании аннотаций и обобщений.Поэтому я думаю, что проверка «Использовать синтаксис Java 5» в Eclipse или «Совместимость Java 5» (не уверенный в точном термине в пользовательском интерфейсе) в Netbeans при создании сущностей с Hibernate обеспечит, что сгенерированный код будетэти «новые функциональные возможности» Java 5 в количестве.

Поскольку у меня всего 42 репутации, я не могу комментировать !!!

1 голос
/ 11 сентября 2014

Поиск в "Red Hat hbm2java docs", потому что ссылка не работает. Добавлен бонус, чтобы вам не пришлось искать. Установите оба этих флажка, чтобы «модернизировать» сгенерированную Java. К сожалению, метки флажков не указывают, что произойдет, если вы их проверите. Можно подумать, что «Использовать синтаксис Java 5» имеет много последствий, и поскольку по умолчанию он отключен, это не является желаемым / типичным поведением.

Обязательно установите оба флажка, чтобы использовать аннотации и обобщения. Затем сообщите Eclipse в параметрах «cleanup» для создания UID серийной версии. Мне потребовалось 3 дня, чтобы понять все это.

0 голосов
/ 05 июля 2013

Чтобы использовать обобщенные java 5 в автоматической сборке, вы можете изменить свои аргументы, чтобы включить jdk5, например:

<hbm2java jdk5="true">

Эта информация документирована здесь: Red Hat hbm2java docs .

...