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
필드를 제거하면 모든 것이 잘 작동하고 감사 데이터 createdDate
및 lastModifiedDate
가 올바르게 데이터베이스에 기록됩니다.
또한 UserEntity 필드에 대해 @ManyToOne
주석을 포함 시켰으며 코드는 정상적으로 실행되지만 데이터베이스에는 createdBy
및 modifiedBy
필드가 없습니다. 이 문제를 어떻게 해결할 수 있습니까?