2017-08-30 31 views
1

我們有一個Spring應用程序,通過@Autowire和其他方式連接到MongoDB時沒有問題。「IllegalArgumentException:至少有一個JPA元模型必須存在」 - 嘗試將應用程序連接到mongo和sql時

現在我們還需要應用程序將連接到SQL數據庫。

所以我們裝箱的@Entity類:

@Entity(name = "SqlCarRecord") 
@Table(name = "Cars") 
final public class SqlCarRecord { 

@Id @GeneratedValue(strategy = GenerationType.AUTO) 
private Long id; 

@Column(name = "name", nullable = false) 
private String name; 
.... 

而一個@Repository接口:

@Repository 
public interface SqlCarsRepository extends JpaRepository<SqlCarRecord, Long> { 
... 

而一個@Configuraion類喜歡這裏的例子https://www.petrikainulainen.net/programming/spring-framework/spring-data-jpa-tutorial-part-one-configuration/

而在th Ë的applicationContext我們增加 <jpa:repositories base-package="path.to.interface.package" />

pom.xml中我們已經有

 <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-beans</artifactId> 
     <version>4.3.5.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-context</artifactId> 
     <version>4.3.5.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-core</artifactId> 
     <version>4.3.5.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-expression</artifactId> 
     <version>4.3.5.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-web</artifactId> 
     <version>4.3.5.RELEASE</version> 
    </dependency> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.3.5.RELEASE</version> 
    </dependency> 

和我們說:

 <dependency> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-data-jpa</artifactId> 
     <version>2.0.0.M3</version> 
    </dependency> 

    <dependency> 
     <groupId>org.eclipse.persistence</groupId> 
     <artifactId>javax.persistence</artifactId> 
     <version>2.1.0</version> 
    </dependency> 

    <!-- DataSource (HikariCP) --> 
    <dependency> 
     <groupId>com.zaxxer</groupId> 
     <artifactId>HikariCP</artifactId> 
     <version>2.6.2</version> 
    </dependency> 

    <!-- JPA Provider (Hibernate) --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-entitymanager</artifactId> 
     <version>5.2.10.Final</version> 
    </dependency> 

    <!-- Spring Data JPA --> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-jpa</artifactId> 
     <version>1.11.6.RELEASE</version> 
    </dependency> 

    <!-- adding this to avoid "java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal" --> 
    <dependency> 
     <groupId>xml-apis</groupId> 
     <artifactId>xml-apis</artifactId> 
     <version>1.4.01</version> 
    </dependency> 

    <!-- adding this to avoid "ClassNotFoundException: org.springframework.data.util.CloseableIterator" --> 
    <dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-commons</artifactId> 
     <version>1.13.6.RELEASE</version> 
    </dependency> 

而在@Service類,我們增加:

.... 

    @Autowired 
    private SqlCarsRepository carsRepository; 

項目順利建成,可是當我們嘗試運行它,我們得到這個錯誤:

Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean 
with name 'jpaMappingContext': Invocation of init method failed; nested 
exception is java.lang.IllegalArgumentException: At least one JPA metamodel 
must be present! 

有些事情我們嘗試:

  • 變化在不同版本的春天聚甲醛,
  • 我們試圖評論他們中的一些,
  • 我們試圖改變接口來擴展CrudRepository
  • 嘗試一個空的構造添加到實體和一些其他的東西

沒有運氣。

會appriciate幫助。

在此先感謝。

@SpringBootApplication(exclude = {JndiConnectionFactoryAutoConfiguration.class,DataSourceAutoConfiguration.class, 
     HibernateJpaAutoConfiguration.class,JpaRepositoriesAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class}) 

如果您是直接使用@EnableAutoConfiguration,試試這個:

回答

0

我通過改變@SpringBootApplication註解這個解決同樣的錯誤消息

@EnableAutoConfiguration(exclude = {JndiConnectionFactoryAutoConfiguration.class,DataSourceAutoConfiguration.class, 
            HibernateJpaAutoConfiguration.class,JpaRepositoriesAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class}) 

看來,根問題在於Spring Boot試圖添加已經在類路徑中的東西。

大部分的答案來自https://stackoverflow.com/a/30597861/7470360

採取
相關問題