2011-07-05 3 views
0

Я работаю над веб-приложением Java/Spring/Hibernate, разработанным в Eclipse.Как вывести из строя объекты гибернации?

Это веб-приложение на самом деле представляет собой два разных проекта, которые дублируют пару классов сущности Hibernate, а также их соответствующие классы хранилища Hibernate. Очевидно, было бы неплохо взять дублированный код и перенести его в внешний JAR-файл или что-то еще.

Из документации Hibernate я знаю, что я должен помещать класс сущности в новый проект JAVA, содержащий файл persistence.xml. Я также знаю, что я могу экспортировать этот проект в JAR и включать его в classpath моих основных проектов. Кроме того, я знаю, что я должен ссылаться на этот JAR из своего hibernate.cfg.xml в моем основном проекте.

По какой-то причине это не так просто с проектом, над которым я сейчас работаю.

Вот вопросы:

  1. в моем внешнем проекте, который содержит общий код, я могу включать класс Hibernate Repository он это тоже? Как это следует отметить в persistence.xml, если это действительно должно быть вообще?

  2. В моем внешнем JAR, насколько минимальным может быть persistence.xml? Например, основной проект уже настраивает диалект спящего режима, поэтому я могу оставить это из этого внешнего JAR's persistence.xml?

  3. Из документов Hibernate я знаю, что могу ссылаться на свой внешний JAR-файл, используя тег <jar-file> в своем hibernate.cfg.xml. Так что, если мой проект не имеет hibernate.cfg.xml? У нас есть конфигурация xml для Spring, которая дает свойство annotatedClasses для org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean. Мне не очень повезло найти примеры ссылок на внешние JAR-файлы с помощью AnnotationSessionFactoryBean.

Я пробовал искать на этом сайте, но не нашел ничего подобного, чтобы помочь мне еще. Извините, если это дубликат сообщения или глупо очевидный вопрос или что-то еще.

Заранее спасибо :)

EDIT:

ОК, так что похоже, что я в конечном счете, нужно знать есть, предположим, я включил "MY_TEST.jar" в моем пути к классам, и далее предположим, что "MY_TEST.jar" имеет один аннотированный Hibernate class: src.shared.myEntity.java

Как я могу обратиться к этому классу сущности с приведенным ниже отрывком конфигурации Spring? (Продолжать получать IllegalArgumentException: Cannot find class в значительной степени независимо от того, что я стараюсь)

<bean id="my.postgres.sessionFactory" 
     class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 

    <property name="dataSource" 
     ref="my.postgres.dataSource" /> 

    <property name="annotatedClasses"> 
     <list> 
     <value>src.app.EntityA</value> 
     <value>src.app.EntityB</value> 
     </list> 
    </property> 
    ......... 
</bean> 

ответ

0

Hibernate не имеет концепции хранилища. Весна делает.

Hibernate не заботится о том, где находятся классы постоянных сущностей. Они должны быть в classpath, вот и все. Независимо от того, находятся ли они в одном, два, или три банки не имеют значения, все ли эти банки в пути к классам.

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

Если общий класс полное имя src.shared.myEntity, то весной конфигурации должны иметь следующие строки:

<property name="annotatedClasses"> 
    <list> 
    ... 
    <value>src.shared.myEntity</value> 
    </list> 
</property> 

Ваша формулировка запутанным, поэтому я проверить, что я считал очевидно, , но, возможно, нет. Полноценное имя класса состоит из его полного имени пакета, за которым следует имя класса без расширения .class или .java. Ящик должен содержать файл .class, не файл .java. Иерархия каталогов в банке должна точно отображать иерархию пакетов. Так что, если ваш объект выглядит следующим образом:

package src.shared; 

@Entity 
public class myEntity { 
    // ... 
} 

Сосуд должен иметь, на корне, src каталога, содержащего каталог shared, содержащего myEntity.class файл.

PS: наличие src в качестве корневого имени пакета действительно странно. Почему вы не уважаете конвенцию: com.yourcompany.yourproject ...?

PPS: название класса должно начинаться с прописной буквы: MyEntity и не myEntity.

+0

Эй, спасибо за быстрый ответ! Извините, я оговорился о вещи в репозитории. У меня есть внешняя банка в моем пути к классам, но у меня возникают проблемы с ее ссылкой, используя свойства AnnotationSessionFactoryBean в моей конфигурации Spring. Опять же, документы Hibernate дают ясный пример того, как это делается с файлом hibernate.cfg.xml, но первоначальный архитектор проекта решил не включать это, а настроить все по конфигурации Spring. Все компилируется, но весна не может найти мои внешние классы Entity. – Langecrew

+0

Затем покажите нам конфигурацию пружины, с которой у вас возникла проблема, и сообщите нам, какое исключение (трассировка стека). Но весна тоже не заботится о баночках. Если какой-либо класс находится в пути к классам, он найдет его. –

+0

опубликовано в правлении к моему оригинальному сообщению – Langecrew

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