我正在尝试使用Annotations启用审核。我的域类具有在构造对象时填充的@Id字段。我为lastModified添加了一个java.util.Date字段,并使用@LastModifiedDate对其进行了注释。
@Document
public class Book {
@Id
private String name;
private String isbn;
@LastModifiedDate
private Date lastModified;
public Book(String name) {
this.name = name;
}
}
我已使用<mongo:auditing/>.
当我尝试保存对象的实例时,出现以下错误:
Book book1 = new Book("ABCD");
mongoOps.save(book1);
java.lang.IllegalArgumentException:不支持的实体com.pankaj.Book!无法确定IsNewStrategy。
我不想使用Auditable接口,也不想从AbstractAuditable扩展我的域类。我只想使用Annotations。 由于我对@CreatedBy和@LastModifiedBy不感兴趣,我也没有实现AuditAware接口。
我只想让@LastModifiedDate适用于我的域类。我错过了什么?
我正在使用SpringData MongoDB 1.7.0版。
答案 0 :(得分:5)
您没有提及如何配置MongoDB连接,但如果您使用的是AbstractMongoConfiguration,它将使用实际配置类的包在启动时查找@Document带注释的类。
如果您的实体位于不同的包中,则必须通过重写AbstractMongoConfiguration.getMappingBasePackage()来手动处理该包。把它放在你的Mongo Configuration类中应该可以解决这个问题(同样,这是考虑你为Mongo配置扩展AbstractMongoConfiguration):
@Override
protected String getMappingBasePackage() {
return "package.with.my.domain.classes";
}
答案 1 :(得分:2)
我有同样的问题,后来我确定我缺少带注释的ID字段;
@Id
private String Id
在我班上我试图坚持
@Document(collection="collectionName")
答案 2 :(得分:2)
使用仅注释配置时遇到了同样的问题。
当你在配置类上放置@EnableMongoAuditing时,Spring将创建一个MappingContext bean。
然后你必须确保在MongoTemplate中使用相同的mappingContext。
@Configuration
@EnableMongoAuditing
@EnableMongoRepositories(value = "my.repositories.package", mongoTemplateRef = "myMongoTemplate")
class MongoConfig {
@Autowired
//Autowiring the MongoMappingContext will supply the same MongoMappingContext as the one used in auditing
MongoMappingContext mongoMappingContext;
@Bean
MongoTemplate myMongoTemplate() {
String databaseName = "mydbname";
MongoDbFactory factory = new SimpleMongoDbFactory(mongoClient, databaseName);
MongoConverter converter = new MappingMongoConverter(factory, mongoMappingContext);
MongoTemplate mongoTemplate = new MongoTemplate(factory, converter);
return mongoTemplate;
}
}
答案 3 :(得分:0)
我在1.6.2版中运行的项目正常运行,但@ LastModifiedDate不会更新。我更新到1.7.1版之后。我和你有同样的问题。
我试图实现这个类:org。 springframework的。数据。域。 Auditable这个界面,看似可以保存正常,但createdBy和createdDate两个字段无法保存到数据库中。
答案 4 :(得分:0)
我有同样的问题并通过使用AbstractPersistable扩展Document类来修复它。在你的情况下它可以是
public class Book extends AbstractAuditable