2017-11-16 1 views
1

엔터티에 대한 감사 데이터를 포함하도록 사용자 세부 정보 서비스를 구현하려고합니다. 다음과 같이스프링 데이터 REST - 사용자 세부 정보 서비스 구현

UserEntity 클래스는 다음과 같습니다

@Data 
@Entity 
@Audited 
public class UserEntity { 

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

    @Column(unique = true,updatable = false) 
    private String uuid; 

    private String username; 

    private String firstName; 

    private String lastName; 
} 

내가 또한 감사 메타 데이터를 포함하는 다음과 같은 클래스가 있습니다. 이 클래스는 다른 엔티티에 의해 확장 될 것입니다.

@Data 
@MappedSuperclass 
@EntityListeners(AuditingEntityListener.class) 
@Audited 
public class Auditable { 

    @CreatedDate 
    private Long createdDate; 

    @LastModifiedDate 
    private Long lastModifiedDate; 

    @CreatedBy 
    private UserEntity createdBy; 

    @LastModifiedBy 
    private UserEntity modifiedBy; 

} 

내 사용자 세부 정보 서비스입니다.

@Configuration 
@EnableJpaAuditing 
public class SpringSecurityAuditorAware implements AuditorAware<UserEntity> { 

    @Autowired 
    private AccessToken accessToken; 

    @Autowired 
    private UserEntityRepository userRepo; 

    @Override 
    public UserEntity getCurrentAuditor() { 

     UserEntity user = userRepo.findByUuid(accessToken.getSubject()); 
     return user; 
    } 

} 

이제 코드를 실행하면 다음과 같은 오류 메시지가 나타납니다.

Caused by: org.hibernate.MappingException: Could not determine type for: api.core.model.UserEntity, at table: business_entity, for columns: [org.hibernate.mapping.Column(created_by)] 
    at org.hibernate.mapping.SimpleValue.getType(SimpleValue.java:431) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] 
    at org.hibernate.envers.configuration.internal.metadata.AuditMetadataGenerator.addValueInFirstPass(AuditMetadataGenerator.java:219) ~[hibernate-envers-5.0.12.Final.jar:5.0.12.Final] 
    at org.hibernate.envers.configuration.internal.metadata.AuditMetadataGenerator.addValue(AuditMetadataGenerator.java:345) ~[hibernate-envers-5.0.12.Final.jar:5.0.12.Final] 
    at org.hibernate.envers.configuration.internal.metadata.AuditMetadataGenerator.addProperties(AuditMetadataGenerator.java:371) ~[hibernate-envers-5.0.12.Final.jar:5.0.12.Final] 
    at org.hibernate.envers.configuration.internal.metadata.AuditMetadataGenerator.generateFirstPass(AuditMetadataGenerator.java:662) ~[hibernate-envers-5.0.12.Final.jar:5.0.12.Final] 
    at org.hibernate.envers.configuration.internal.EntitiesConfigurator.configure(EntitiesConfigurator.java:94) ~[hibernate-envers-5.0.12.Final.jar:5.0.12.Final] 
    at org.hibernate.envers.boot.internal.EnversServiceImpl.doInitialize(EnversServiceImpl.java:152) ~[hibernate-envers-5.0.12.Final.jar:5.0.12.Final] 
    at org.hibernate.envers.boot.internal.EnversServiceImpl.initialize(EnversServiceImpl.java:117) ~[hibernate-envers-5.0.12.Final.jar:5.0.12.Final] 
    at org.hibernate.envers.boot.internal.AdditionalJaxbMappingProducerImpl.produceAdditionalMappings(AdditionalJaxbMappingProducerImpl.java:99) ~[hibernate-envers-5.0.12.Final.jar:5.0.12.Final] 
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:288) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final] 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final] 
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874) ~[hibernate-entitymanager-5.0.12.Final.jar:5.0.12.Final] 
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.10.RELEASE.jar:4.3.10.RELEASE] 
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) ~[spring-orm-4.3.10.RELEASE.jar:4.3.10.RELEASE] 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370) ~[spring-orm-4.3.10.RELEASE.jar:4.3.10.RELEASE] 
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359) ~[spring-orm-4.3.10.RELEASE.jar:4.3.10.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE] 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.10.RELEASE.jar:4.3.10.RELEASE] 
    ... 171 common frames omitted 

나는 UserEntity 필드를 제거하면 모든 것이 잘 작동하고 감사 데이터 createdDatelastModifiedDate가 올바르게 데이터베이스에 기록됩니다.

또한 UserEntity 필드에 대해 @ManyToOne 주석을 포함 시켰으며 코드는 정상적으로 실행되지만 데이터베이스에는 createdBymodifiedBy 필드가 없습니다. 이 문제를 어떻게 해결할 수 있습니까?

답변

0

Auditable_aud라는 테이블이 있어야합니다.

관련 문제