Estoy usando Spring Boot, por lo tanto, no estoy usando ningún archivo xml para las configuraciones. Lo que tengo que hacer es habilitar MongoAuditing para guardar createdDate, lastModifiedDate, etc. mientras guardo datos usando MongoRepositories.
mi clase modelo
@Component @Document(collection = "CAPPING") public class TemporaryCapping extends BaseEntity { @Field("contract_id") private BigInteger contractId; @Field("period_id") private BigInteger periodId; @Field("user_id") private BigInteger userId; @Field("amount") private Double amount; @Field("type_of_capping") private TypeOfCapping typeOfCapping; public BigInteger getContractId() { return contractId; } public void setContractId(BigInteger contractId) { this.contractId = contractId; } public BigInteger getPeriodId() { return periodId; } public void setPeriodId(BigInteger periodId) { this.periodId = periodId; } public BigInteger getUserId() { return userId; } public void setUserId(BigInteger userId) { this.userId = userId; } public Double getAmount() { return amount; } public void setAmount(Double amount) { this.amount = amount; } public TypeOfCapping getTypeOfCapping() { return typeOfCapping; } public void setTypeOfCapping(TypeOfCapping typeOfCapping) { this.typeOfCapping = typeOfCapping; } } public class BaseEntity implements Serializable{ @Id @Indexed(unique = true) private BigInteger id; @CreatedDate private DateTime createdDate; @Field("modified_date") private BigInteger modifiedDate; public BigInteger getId() { return id; } public void setId(BigInteger id) { this.id = id; } public DateTime getCreatedDate() { return createdDate; } public void setCreatedDate(DateTime createdDate) { this.createdDate = createdDate; } public BigInteger getModifiedDate() { return modifiedDate; } public void setModifiedDate(BigInteger modifiedDate) { this.modifiedDate = modifiedDate; }
He usado la anotación @CreateDate para guardar createDate. y he usado la dependencia de jodatime para DateTime
<dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> <version>2.9.7</version> </dependency>
spring-data-mongodb también se agrega en las dependencias.
Esta es mi clase de aplicación principal.
@SpringBootApplication @EnableMongoAuditing public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
¿Dónde me equivoco en esta implementación ya que la fecha no se guarda en la base de datos? También sé que para guardar @createdBy necesita escribir el bean AuditorAware, pero por ahora solo estoy tratando de guardar createdBy.
¿Dónde se debe usar @EnableMongoAuditing?
En mi aplicación la configuro a través de código Java. Uso @EnableMongAuditing de esta manera y también creo conversos para ZonedDateTime.
@Configuration @EnableMongoAuditing @EnableMongoRepositories(basePackages = { BASE_PACKAGE }) public class MongoConfiguration extends AbstractMongoConfiguration { public static final String BASE_PACKAGE = "package.with.aggregates"; @Value("${spring.data.mongodb.uri}") private String mongoUri; @Value("${spring.data.mongodb.database}") private String databaseName; @Override protected String getDatabaseName() { return databaseName; } @Override public Mongo mongo() throws Exception { return new MongoClient(new MongoClientURI(mongoUri)); } // Here you must add converters to Joda datetypes. In my solution is ZonedDateTime @Override public CustomConversions customConversions() { List<Converter<?, ?>> converterList = new ArrayList<>(); converterList.add(new DateToZonedDateTimeConverter()); converterList.add(new ZonedDateTimeToDateConverter()); return new CustomConversions(converterList); } @Override protected String getMappingBasePackage() { return BASE_PACKAGE; } }
@EnableMongoAuditing en realidad se puede colocar en cualquier lugar de las configuraciones (junto a la anotación @Configuration)