2017-10-21 1 views
2

내 봄 부팅 응용 프로그램에서 MongoDB의 감사를 구성하기 위해 노력하고있어, 내 도메인 클래스를 유지하려고 할 때 나는이 오류를 갖는봄 부팅 MongoDB를 감사 오류

java.lang.IllegalArgumentException: Couldn't find PersistentEntity for type class com.example.hateoasapi.domain.Post! 

문서 https://docs.spring.io/spring-data/mongodb/docs/current/reference/html/#auditing 여기에서는이 모든 것을 말한다 configs 충분하지만, 왜 내 프로젝트에서 작동하지 않는지 모르겠다. 누군가 나를 도울 수 있습니까?

내 MongoDB를의 설정 클래스 :

package com.example.hateoasapi.config; 


import org.springframework.beans.factory.annotation.Value; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.data.mongodb.config.AbstractMongoConfiguration; 
import org.springframework.data.mongodb.config.EnableMongoAuditing; 
import org.springframework.data.mongodb.core.MongoTemplate; 

import com.mongodb.MongoClient; 
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; 

import java.util.Collection; 
import java.util.Collections; 


@Configuration 
@EnableMongoAuditing 
@EnableMongoRepositories(value = "com.example.hateoasapi.repository") 
public class MongoConfig extends AbstractMongoConfiguration { 

    @Value("${spring.data.mongodb.database}") 
    private String databaseName; 

    @Value("${spring.data.mongodb.host}") 
    private String databaseHost; 

    @Value("${spring.data.mongodb.port}") 
    private Integer databasePort; 

    @Override 
    protected String getDatabaseName() { 
     return this.databaseName; 
    } 

    @Bean 
    @Override 
    public MongoClient mongoClient() { 
     return new MongoClient(databaseHost, databasePort); 
    } 

    @Bean 
    public MongoTemplate mongoTemplate() { 
     return new MongoTemplate(mongoClient(), databaseName); 
    } 

    @Override 
    protected Collection<String> getMappingBasePackages() { 
     return Collections.singleton("com.example.hateoasapi.domain"); 
    } 
} 

AuditorAware 구현 :

package com.example.hateoasapi.config; 


import com.example.hateoasapi.domain.User; 
import org.springframework.data.domain.AuditorAware; 
import org.springframework.security.core.Authentication; 
import org.springframework.security.core.context.SecurityContextHolder; 
import org.springframework.stereotype.Component; 

import java.util.Optional; 

@Component 
public class SecurityAuditor implements AuditorAware<User> { 

    @Override 
    public Optional<User> getCurrentAuditor() { 
     Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 

     if (authentication == null || !authentication.isAuthenticated()) { 
      return null; 
     } 

     return Optional.of((User) authentication.getPrincipal()); 
    } 
} 

그리고 내 도메인 클래스 :

package com.example.hateoasapi.domain; 

import javax.persistence.Id; 
import javax.validation.constraints.NotBlank; 
import javax.validation.constraints.NotEmpty; 

import org.joda.time.DateTime; 
import org.springframework.data.annotation.CreatedBy; 
import org.springframework.data.annotation.CreatedDate; 
import org.springframework.data.annotation.LastModifiedDate; 
import org.springframework.data.mongodb.core.mapping.DBRef; 
import org.springframework.data.mongodb.core.mapping.Document; 
import org.springframework.data.mongodb.core.mapping.Field; 
import org.springframework.hateoas.ResourceSupport; 
import com.fasterxml.jackson.annotation.JsonCreator; 

import lombok.Getter; 
import lombok.Setter; 
import lombok.ToString; 

import static org.springframework.hateoas.mvc.ControllerLinkBuilder.*; 

import java.io.Serializable; 
import java.util.List; 

import com.example.hateoasapi.controller.*; 

@Getter 
@Setter 
@ToString 
@Document 
public class Post extends ResourceSupport implements Serializable { 

    @Id 
    @Field(value = "_id") 
    private String objectId; 

    @DBRef 
    private List<Comment> comments; 

    @DBRef 
    private User author; 

    @NotBlank 
    private String body; 

    @NotBlank 
    private String title; 

    private String categoryId; 

    @NotEmpty(message = "Tags cannot be empty") 
    private List<PostTag> tags; 

    @CreatedDate 
    private DateTime createdDate; 

    @LastModifiedDate 
    private DateTime lastModifiedDate; 

    @CreatedBy 
    private User createdBy; 

    private Long views;  
    private List<PostRating> likes; 
    private List<PostRating> dislikes; 


    @JsonCreator 
    public Post() {} 

    public Post(String title, String body) { 
     this.body = body; 
     this.title = title; 
    } 

    public Post(User author, String body, String title, String categoryId, List<PostTag> tags) { 
     this.author = author; 
     this.body = body; 
     this.title = title; 
     this.categoryId = categoryId; 
     this.tags = tags; 
    } 

    public void addLinks() { 
     this.add(linkTo(methodOn(PostController.class).getAllPosts(null)).withSelfRel()); 
    } 
} 

답변

0

당신이 봄 부팅의 마지막 버전을 사용하는 경우 (2.0) 및 스프링 데이터, @EnableMongoAuditing @EnableMongoRepositories are com patible. EnableReactiveMongoRepositories 주석과 동일합니다.

mongo 감사를 사용하려면 MongoConfig 클래스를 제거하고 config 파일을 사용하여 mongodb 연결을 정의해야합니다. 모든 것이 작동합니다.