Какви са най-добрите практики за използване на hbm2java на Hibernate?

Използвам Hibernate, Maven и Eclipse (STS build), за да създам проект. Използвам файлове hbm.xml, за да укажа моята схема. Искам да използвам hbm2java на Hibernate, за да генерирам моите моделни класове. Работи добре и генерира кода, който искам.

Той работи перфектно от командния ред, генерира кода на модела и след това изгражда и тества според очакванията.

Въпреки това Eclipse изглежда не може да се справи с това. Периодично ще „загуби ума си“ и ще бъде неспособен да разреши много прости импортирания и класове, посочени в моите DAO класове, които са ръчно кодирани. Нещата, които не може да намери, са класове като HibernateUtil. По ирония на съдбата изглежда, че няма никакви проблеми с намирането на моделните класове.

Неразрешените класове са в папка target/classes/blah-blah в края на изпълнението. Така че те очевидно се копират на правилното място.

В среда на „непрекъсната интеграция“ най-добре ли е да генерирам източниците веднъж, да ги ангажирам към моя контрол на версиите и след това да деактивирам генерирането на код? Или е възможно кодът да се генерира всеки път, като по този начин се гарантира, че вземам всички промени в базата данни без човешка намеса?


person Marvo    schedule 31.12.2011    source източник


Отговори (2)


IMHO, обектите трябва да бъдат ядрото на вашето приложение и трябва да бъдат проектирани, внедрени и документирани внимателно. Те трябва да бъдат обекти с методи, капсулиращи поведението. Автоматичното им генериране е абсурд, IMO.

Генерирането им в самото начало може да е опция, за да започнете, но след като бъдат генерирани, изработете ги ръчно и не ги генерирайте отново. Добавете необходимите свойства и методи при промяна на схемата и преработете съществуващия код.

Между другото, наистина предпочитам да използвам анотации за картографирането, защото е по-малко подробно, по-малко податливо на грешки и цялата информация е на едно място.

person JB Nizet    schedule 31.12.2011
comment
Благодаря ти. Но искам източникът на истината да бъде схемата на моята база данни. Като напиша на ръка класовете на схемата и модела, сега имам множество места, където съществува това знание. Виждате ли някаква стойност в това схемата на базата данни (или в този случай файловете hbm.xml) да бъде единственото място, където се дефинира моделът? (Предполагам, че дефинирате всичко на едно място: вашите класове на Java модел.) - person Marvo; 31.12.2011
comment
Работихме с анотации, но открихме, че са точно обратното: наистина грозни за гледане и разпръснати из целия код. С hbm файловете се усеща, че дефиницията на базата данни е на едно място. Но все още не съм решен по този въпрос. (Наистина оценявам отговора ви, въпреки въпросите ми.) - person Marvo; 31.12.2011
comment
Схемата на базата данни е в базата данни или в SQL скриптовете, използвани за създаване на схемата, и също е в hbm файловете, така че не виждам как променя нещо, за да има класовете, генерирани от hbm или ръчно. Ако се притеснявате, че hbm и java файловете не са синхронизирани, тогава използвайте анотации. Така или иначе трябва да имате модулни тестове, за да проверите дали всичко работи правилно. - person JB Nizet; 31.12.2011
comment
Също така генерирам схемата с hbm2ddl и всеки път подготвям тестова база данни, като посочвам експортиране. Това работи добре. И добра точка относно модулните тестове, които улавят такива неща. Вече ги имам на място. - person Marvo; 31.12.2011
comment
Връщайки се към този въпрос няколко години по-късно и четири години опит с Hibernate ми доказват, че това наистина е най-добрият отговор. - person Marvo; 18.11.2015
comment
@JBNizet да, това е перфектен пример за модела на анемичен домейн: martinfowler.com/bliki/AnemicDomainModel.html - person Lawrence Tierney; 30.11.2016

Опитайте тази:

От преминаване на командния ред към вашата директория на проекта, където pom.xml на проекта присъства и се изпълнява:

mvn eclipse:clean eclipse:eclipse

Ако пише, че не мога да намеря плъгин eclipse, опитайте:

mvn eclipse:install-plugin

Първо и след това опитайте командата по-горе отново.

По този начин всички зависимости на maven и проекта ще бъдат разрешени и на ниво eclipse.

Уведомете ме, ако това не е това, което търсите.

person Tarun    schedule 09.10.2012