У меня есть настройка проекта, в которой я модульно проектировал и упаковал модуль в файл jar, который включается в основной проект, когда мы создаем войну и разворачиваем ее.Проблема, с которой я сталкиваюсь, состоит в том, что у меня есть Entity, присутствующий в модуле, который не загружается, когда контейнер JPA EntityManagerFactory для unitName создается во время запуска.
Основной вопрос, который у меня возникает, заключается в том, не ищет ли EntityManager файл persistence.xml, затем загружает указанные свойства и затем сканирует все пакеты на наличие аннотации @Entity?
Было бы замечательно понять, как это работает и как я могу решить эту проблему.
Я нашел эту ссылку, и она упоминает о создании отдельных модулей персистентности, но здесь мне не нужен отдельный блок персистентности.Мне просто нужен модуль, чтобы вернуться к родительскому проекту и загрузить сущность и любые другие классы @Resource, @Component, что он делает из-за контекста: компонентное сканирование и конфигурация аннотации.
http://javathoughts.capesugarbird.com/2009/02/jpa-and-multiple-persistence-units.html
Вот мой код / конфигурация
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="persistenceUnitName" value="LineManagement" />
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="generateDdl" value="false" />
<property name="showSql" value="false" />
<property name="databasePlatform" ref="cpsHibernateDialectClassName" />
</bean>
</property>
<property name="beanName" value="entityManager"></property>
</bean>
определение EnitityManagerFactory для запуска Entity Manager.
<persistence-unit name="LineManagement" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="hibernate.id.new_generator_mappings" value="true" />
<property name="hibernate.current_session_context_class" value="thread" />
<property name="hibernate.default_batch_fetch_size" value="200" />
....
Persistence.xml, который определяет кэш второго уровня и другие свойства гибернации.
Затем модуль, имеющий сущность.
import javax.persistence.Entity;
@Entity
@Table(name = IntegrationEvent.TABLE_NAME, uniqueConstraints = @UniqueConstraint(columnNames = "INTGRTN_EVNT_QUEUE_SK"))
@GenericGenerator(name = "UUID_GEN", strategy = "org.hibernate.id.UUIDHexGenerator", parameters = { @Parameter(name = "separator", value = "-") })
public class IntegrationEvent implements Serializable {
....}
Примечание: сущность находится в другом пакете, чем родительский, так как онаэто отдельный модуль самостоятельно.
Сущность, которая прекрасно загружается в основном проекте.
package com.parent.line.entity;
import javax.persistence.Entity;
@Entity
@Table(name = "ACCOUNT")
@Cacheable(true)
public class Account
implements LMLookupTypeEntityByDivision, Serializable, Comparable<Account> {