2013-02-26 4 views
2

У меня есть проект, который использует другой проект как lib, и у меня есть Spring и Hibernate для обоих проектов, проблема в том, что мне нужно отобразить классы из моего первого проекта в мой второй проект.Несколько классов в PersistenceUnit

Это исключение, которое я получил:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Usuario is not mapped [SELECT u FROM Usuario u WHERE usuario = 'abc' order by idUsuario desc] 
    at org.hibernate.hql.internal.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:180) 

Так что я попытался сопоставить классы в persistence.xml, таким образом:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
    <persistence-unit name="default"> 

    <class>com.planner.pov.model.Usuario</class> 
    <class>com.planner.pov.model.LogWork</class> 
    <class>com.planner.pov.model.Responsavel</class> 
    <class>com.planner.pov.model.GrupoResponsavel</class> 
    <class>com.planner.pov.model.Cargo</class> 
    <class>com.planner.pov.model.TarefaBackLog</class> 
    <class>com.planner.pov.model.ItemBackLog</class> 
</persistence-unit> 

Но есть так много классы для отображения, все они цепочки ... Есть ли лучший способ сделать это?

@EDIT

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd 
    http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> 

    <context:component-scan base-package="com.planner.pov" /> 
    <bean 
     class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> 

    <bean id="ConfiguradorDePropriedades" 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <description>The service properties file</description> 
     <property name="location" value="file:AppConfig.properties" /> 
    </bean> 

    <bean id="entityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="dataSourceLocal" /> 
     <property name="packagesToScan" value="com.planner.pov" /> 
     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="database" value="${database}" /> 
       <property name="showSql" value="false" /> 
       <property name="generateDdl" value="true" /> 
      </bean> 
     </property> 
    </bean> 
    <bean id="dataSourceLocal" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${driver}" /> 
     <property name="url" value="${jdbc.url}" /> 
     <property name="username" value="${jdbc.user}" /> 
     <property name="password" value="${jdbc.pass}" /> 
    </bean> 

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"> 
     <property name="entityManagerFactory" ref="entityManagerFactory" /> 
    </bean> 

    <tx:annotation-driven transaction-manager="transactionManager" /> 

    <!-- Configuração do LogWorkController --> 
    <bean id="logWorkDao" class="br.javablocker.dao.LogWorkDaoImpl" /> 

    <!-- Configuração do ClockMainController --> 
    <bean id="clockMainController" class="br.javablocker.controller.PlannerClockMainController"> 
     <property name="usuarioController" ref="usuarioController" /> 
     <property name="logWorkDao" ref="logWorkDao" /> 
    </bean> 

    <!-- Configuração do UsuarioController --> 
    <bean id="usuarioDao" class="br.javablocker.dao.UsuarioDaoImpl" /> 
    <bean id="responsavelDao" class="com.planner.pov.dao.ResponsavelDaoImpl" /> 

    <bean id="usuarioController" class="br.javablocker.controller.UsuarioController"> 
     <property name="usuarioDao" ref="usuarioDao" /> 
     <property name="responsavelDao" ref="responsavelDao" /> 
     <property name="logWorkDao" ref="logWorkDao" /> 
    </bean> 

    <bean id="logWorkController" class="br.javablocker.controller.LogWorkController"> 
     <property name="logWorkDao" ref="logWorkDao" /> 
    </bean> 

</beans> 
+0

Возможно, [это] (http://stackoverflow.com/a/1999380/778118) поможет. В моей памяти указано, что вам не нужно указывать каждый объект, если вы хотите использовать все сущности из заданного местоположения. Может быть, [this] (http://stackoverflow.com/a/1780362/778118) или [это] (http://stackoverflow.com/q/1999307/778118) тоже может помочь. – jahroy

+0

это также может помочь: http://stackoverflow.com/questions/1780341/do-i-need-class-elements-in-persistence-xml – benzonico

+0

Спасибо за ответ! Но если я использую тег MyProject.jar, он будет работать, только если у меня есть проект как файл jar, но что, если у меня его еще нет, я имею в виду в случае тестирования? –

ответ

1

В вашей установке конфигурации Spring компонент сканирования для поиска сущностей, обратите внимание, что вы должны включать в себя контекст имен:

<context:component-scan base-package="com.planner.pov.model"/> 

С помощью этой настройки вы сможете удалить классы из persistence.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="1.0" 
    xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 
    <persistence-unit name="default"> 
     <provider>org.hibernate.ejb.HibernatePersistence</provider> 

</persistence-unit> 

+0

Спасибо за ответ @KevinBowersox, но проблема остается ... –

+0

@ GabrielCâmara попробуйте добавить провайдер в вашем persistence.xml, также если вы разместите конфигурацию весны, я бы лучше вам помог. –

+0

Хорошо, я собираюсь изменить свое сообщение и добавить свой applicationContext.xml. Чтобы продолжить проект, я сопоставил классы один за другим, в конце концов, было не так много классов, но это хорошо, чтобы избежать этого в будущем. –

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