2014-12-22 2 views
1
настойчивости

В XML подходе спящего режима, когда мы создаем зимуем SessionFactory объекта с помощьюSessionFactory Создания объекта конструктор класса с использованием по умолчанию

частной статической конечного SessionFactory SessionFactory = новой конфигурации() настройки() buildSessionFactory()..;

тогда он будет вызывать конструктор по умолчанию класса persistance 3 раза, что означает создание объекта фабрики Session, ему нужен конструктор по умолчанию для класса persistance, но если я удаляю конструктор по умолчанию из своего класса, и только конструктор аргументов есть в этом случае JVM not предоставить конструктор по умолчанию, как создать объект фабрики сеансов?

ответ

0

Hibernate пытается создать компонент, и он делает это через отражение. Он создает объект, вызывая конструктор no-arg, а затем используя методы setter для установки свойств. Вы не можете использовать bean-компонент, у которого нет конструктора no-arg.

Если вы не имеете конструктор по умолчанию, вы должны получить исключение

org.hibernate.InstantiationException: No default constructor for entity: <ClassName> 

Больше reading

+0

Энди, спасибо за ваш ответ, но у меня нет конструктора по умолчанию в моем классе pojo, и он все еще может сохранять данные без каких-либо ошибок, поэтому использование конструктора по умолчанию. – Wolverine

+0

Hibernate вызывает этот конструктор по умолчанию при создании объекта –

0

гибернации при использовании по умолчанию конструктор без аргументов для создания экземпляра объекта класса POJO.

Но если Конструктор по умолчанию не существует в классе Pojo, то он может использовать аргумент ред конструктор, если есть несколько конструкторов аргумента ред есть, то он будет бросать ошибки

org.hibernate.InstantiationException: No default constructor for entity: <ClassName> 
2

На самом деле, вы можете создать экземпляр класса, которые имеют нет конструктора 0-args; вы можете получить список конструкторов класса, выбрать один и вызвать его с разными параметрами. Хотя это возможно, и я проверил, что это сработает и не будет проблематичным, вам придется согласиться с тем, что это довольно странно.

Построение объектов способом Hibernate (я считаю, что он вызывает конструктор 0-arg, а затем он, вероятно, изменяет поля экземпляра непосредственно через Reflection. Возможно, он знает, как вызывать сеттеры) немного отличается от того, как объект который должен быть сконструирован в Java, вызывает конструктор с соответствующими параметрами, чтобы новый объект был объектом, который вы хотите.

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