2016-05-09 8 views
2

私は春のチュートリアルに従って、私のdbテーブルを公開しようとしていますが、私は次の例外を実行しています。ここで春データ:マネージ型ではありません:クラスjava.lang.Object

は私が

package com.xxx.xxx.db; 

import org.springframework.data.repository.Repository; 

import java.io.Serializable; 

public interface BaseRepository<T, ID extends Serializable> extends Repository<T, ID>{ 
    T findOne(ID id); 
    T save(T entity); 
} 

を使用していますが、ここで私の特定のサービスクラスが

package com.xxx.xxx.tablename; 

import com.xxx.xxx.db.BaseRepository; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 

@Service 
public class TableNameService { 

    @Autowired 
    private BaseRepository<TableName, Long> repository; 

    public TableName findById(Long id){ 
    return repository.findOne(id); 
    } 
} 

であり、ここで私のエンティティが私の春の構成がされている

package com.xxx.xxx.tablename; 

import lombok.Getter; 
import lombok.Setter; 

import javax.persistence.Entity; 
import javax.persistence.Id; 
import javax.persistence.Table; 
import javax.validation.constraints.NotNull; 

@Getter 
@Setter 
@Entity 
@Table(name="table_name") 
public class TableName { 

    @Id 
    private long id; 

    @NotNull 
    private String name; 

    public TableName() { 
    } 

    public TableName(long id){ 
    this.id = id; 
    } 

    public TableName(String name){ 
    this.name = name; 
    } 

    public TableName(long id, String name){ 
    this.id = id; 
    this.name = name; 
    } 
} 

あるクラスでありますapplication.ymlファイルによって行われます。ファイルには現在databaseという接続情報しかありません。

BeansConfigというクラスがあり、@Configurationというアノテーションが付けられています。しかし、このクラスは、application.ymlによって提供されているdbプロパティが有効かどうかを検証するために使用されています。ここ

そして今、あなたがしようとしている方法ではできません例外

springframework.beans.factory.BeanCreationException: Error creating bean with name 'TableNameService': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.xxx.xxx.db.BaseRepository com.xxx.xxx.tablename.TableNameService.repository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'baseRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538) 
    at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118) 
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766) 
    at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:307) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1191) 
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1180) 
    at com.xxx.xxx.Application.main(Application.java:12) 
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.xxx.xxx.db.BaseRepository com.xxx.xxx.tablename.TableNameService.repository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'baseRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573) 
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331) 
    ... 17 common frames omitted 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'baseRepository': Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1199) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014) 
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545) 
    ... 19 common frames omitted 
Caused by: java.lang.IllegalArgumentException: Not an managed type: class java.lang.Object 
    at org.hibernate.jpa.internal.metamodel.MetamodelImpl.managedType(MetamodelImpl.java:219) 
    at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:68) 
    at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getEntityInformation(JpaEntityInformationSupport.java:67) 
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:152) 
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:99) 
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:81) 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:185) 
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.initAndReturn(RepositoryFactoryBeanSupport.java:251) 
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:237) 
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:92) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) 
    ... 29 common frames omitted 
+0

あなたは春データのすでに利用可能なリポジトリのインターフェースを使用することができます - たとえばJpaRepositoryため。 "TableRepository extends JpaRepository "のようなもので、@Repository注釈でアノテーションを付けてください。 – lenach87

答えて

3

です。 TEntityである必要があるため、入力制限が必要です。 1つのオプションは、具体的なエンティティごとに1つのリポジトリを作ることであろうが、ここではあなたはそれを実装するより汎用的な方法があります。

はあなたのエンティティのBaseClassのに使用します。

@Entity 
public abstract class BaseClass<IdType extends Serializable>{ 

    private IdType id; 

    //Getter and setters 

} 

は、お使いのベースクラスの@Repositoryを定義します。

@Repository 
public interface Dao<T extends BaseClass, IdType extends Serializable> extends 
     CrudRepository<T, IdType> { 

} 

このインターフェイスで共有エンティティ操作を定義し、それを要求する場合はより具体的なものを継承することができます。

も参照してください:

+0

それは私が実装したいと思っているものですが、今のところ、私は特定のクラスのレポを書くのに苦労しています。私はクラス 'TableNameGatewayRepo を拡張しました.JpaRepoistory を拡張していますが、まだ同じエラーが発生しています –

+0

' TableNameGatewayRepo extends CrudRepository 'または'Crud' –

+0

が働いた。ありがとう –

関連する問題