зимуйте MappingException: не Мог определить тип для: java.util. Набор

Я плохо знаком с Явой и Зимую (хотя я имею знакомый со Структурой Предприятия, так поймите много понятий),

All I want to do is create a Table OrganisationNode which has the following fields: Id, Name and ParentId

ParentId is Nullable and, if present, should point at a valid OranisationNode.Id.

Я предположил, что это должно быть довольно просто, но проводивший более чем 2 дня googling и редактирующий XML-файлы, я начинаю терять терпение.

Позвольте мне начать с фрагментов кода...

OrganisationNode.java

@javax.persistence.Entity
public class OrganisationNode extends EntityBase implements Serializable {
    private String name;

    @ManyToOne(targetEntity = OrganisationNode.class, optional = true)
    @JoinColumn(name="ParentId", referencedColumnName="Id") //This is one example of this attribute. I've tried many combinations
    private OrganisationNode parent;

    @OneToMany
    private Set children = new HashSet();

    //Getters/Setters
}

EntityBase.java

@javax.persistence.Entity
public class EntityBase implements Serializable {
    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Long id;

    //Getter/Setter
}

Hibernate.config.xml



  
    org.hibernate.dialect.MySQLDialect
    com.mysql.jdbc.Driver
    jdbc:mysql://mysqldev:3306/SomeDb?zeroDateTimeBehavior=convertToNull
    SomeUser
    SomePass!
    create
    true
    
  

Hibernate.hbm.xml



    
        
        
        
        
    

HibernateUtil.java

public class HibernateUtil {

    private static SessionFactory sessionFactory;

    public static void configureSessionFactory() {

            Configuration configuration = new Configuration();
            configuration.configure("hibernate.cfg.xml");
            ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder().applySettings(configuration.getProperties());
            sessionFactory = configuration.buildSessionFactory(serviceRegistryBuilder.buildServiceRegistry());
    }

    public static SessionFactory getSessionFactory() {
        if(sessionFactory == null){configureSessionFactory();}
        return sessionFactory;
    }
}

Исключение, которое я в настоящее время получаю...

javax.servlet. ServletException: org.hibernate. MappingException: не Мог определить тип для: java.util. Набор, за столом: OrganisationNodes, для колонок: [org.hibernate.mapping. Колонка (Дети)]

Так, мой первый вопрос состоит в том, как я могу решить это исключение? Я полагаю, что явно сказал его, на какой Дети должны указывать.

Мой следующий вопрос... Это все действительно необходимо? Мне трудно полагать, что подъем единственного стола и работа ORM берут такую конфигурацию и код. Большая часть того, что я имею здесь, была взломана от различных примеров в сети, таким образом, я не уверен в качестве. Конечно, 90% этой информации должны быть доступными, чтобы зимовать через отражение?

1
nl ja de
@XaviLó ре положительной стороны pez: свойства, I' изменение ll это. Относительно @MappedSuperClass , я don' у t есть подсказка TBH - я принял (возможно, по-дурацки), что это будет достаточно интеллектуально, чтобы посмотреть на все свойства на объекте, неважно куда они произошли из - единственная причина для EntityBase - это I' ve использовал аналогичный подход в EF, который позволяет мне снимать любое предприятие в качестве EntityBase и общая собственность доступа как Id , CreatedOn , и т.д... I' ll делают некоторое чтение на MappedSuperClass, спасибо
добавлено автор Basic, источник
@XaviLó pez, окружающий didn' t имеют любое значение так I' ve обновил Q со строчными буквами, чтобы избежать других, определяющих то же самое, спасибо.
добавлено автор Basic, источник
Don' t знают если it' s непосредственно связанный с этой ошибкой, но shouldn' t свойства в hbm файле начинаются со строчных букв? Кроме того, wouldn' t EntityBase должен быть @MappedSuperClass ? Как примечание стороны, I' d рекомендуют придерживаться единственного способа определить отображения, или аннотации или hbm.xml.
добавлено автор Xavi López, источник
Действительно, в 5.1.11. Собственность они заявляют" имя: название собственности, с начальной строчной буквой. ".
добавлено автор Xavi López, источник
Кроме того, выглядя ближе, кажется вероятным, что ошибка прибывает из смешивания аннотации и xml отображение конфигурации на той области. Попытайтесь определить их всех единственным способом.
добавлено автор Xavi López, источник

2 ответы

Вы смешиваете xml-отображение и аннотации здесь. Одни только аннотации находятся достаточно в вас случаем. Сначала удалите Hibernate.hbm.xml.

OrganisationNode.java

@Entity
public class OrganisationNode extends EntityBase {

    private String name;
    private String description;

    @ManyToOne
    @JoinColumn(name="ParentId")
    private OrganisationNode parent;

    @OneToMany
    private Set children = new HashSet();

}

EntityBase.java

@Entity
public class EntityBase {
    @Id
    @GeneratedValue
    private Long id;

}

Hibernate.config.xml



  
    org.hibernate.dialect.MySQLDialect
    com.mysql.jdbc.Driver
    jdbc:mysql://mysqldev:3306/SomeDb?zeroDateTimeBehavior=convertToNull
    SomeUser
    SomePass!
    create
    true

    
  

2
добавлено
Спасибо, I' ve теперь получил совершенно различную ошибку, что означает I' m успехи
добавлено автор Basic, источник

Необходимо или использовать "Hibernate.hbm.xml" или аннотации использования. Вы пытаетесь использовать обоих, и я думаю, что это запутывающее, зимуют.

Все вы выполняете в "Hibernate.hbm.xml", может быть помещено в классы предприятия как аннотации вместо этого. Это делает вещи очень более простой:

@Entity
@Table(name = "OrganisationNodes")
public class OrganisationNode implements Serializable {
    @Column(name = "NAME")
    private String name;

    @Column(name = "DESCRIPTION")
    private String description;
    etc.

Я избавился бы от EntityBase также. Это не дает вам очень видимо, и расширяющий базовые классы в Зимуют, может быть болезненным.

1
добавлено
Спасибо за ваш ответ. Начиная с вас обоих осведомленных в то же время и я нашел @overmeulen' s отвечают немного более подробный (например, включая Много-одно отношения от Q), I' ve присужден ему/ее. Спасибо за вашу помощь, хотя!
добавлено автор Basic, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async