Java spring 数据 mongodb:UUID 作为 mongodb 中的实体 ID
Java spring data mongodb: UUID as entity ID in mongodb
我正在使用 spring-boot-starter-data-mongodb:
构建 spring 启动应用程序
我的实体看起来像:
@Document(collection = "nodes")
@Data
@Builder
public class Node {
@Id
UUID id;
String info;
}
和存储库接口:
public interface NodesRepository extends MongoRepository<Node, UUID> {
}
问题是,当我插入具有空 id
字段的节点对象时,应用程序抛出异常并显示以下消息:
Cannot autogenerate id of type java.util.UUID for entity of type
model.Node!
我知道开箱即用 spring mongodb 支持自动生成的 String 和 BigInteger id 类型。
所以我想知道是否可以使用 UUID 作为我的 id 字段的类型?我可以为我的实体创建某种类型的自定义 MappingMongoConverter
吗?
您可以通过创建 CustomRepository 来解决这个问题
@NoRepositoryBean
public interface CustomMongoRepository<T extends BaseEntity>
extends MongoRepository<T, Long> {
}
public class CustomMongoRepositoryImpl<T extends BaseEntity>
extends SimpleMongoRepository<T, Long> implements CustomMongoRepository<T> {
CustomMongoRepositoryImpl(
MongoEntityInformation<T, Long> entityInformation,
MongoOperations mongoOperations) {
super(entityInformation, mongoOperations);
}
@Override
public <S extends T> S insert(S entity) {
generateId(entity);
return super.insert(entity);
}
@Override
public <S extends T> List<S> insert(Iterable<S> entities) { ... }
@Override
public <S extends T> S save(S entity) { ... }
@Override
public <S extends T> List<S> save(Iterable<S> entities) { ... }
protected <S extends T> void generateId(S entity) { ... }
}
@SpringBootApplication
@EnableMongoRepositories(repositoryBaseClass = CustomMongoRepositoryImpl.class)
public class Application {
...
}
希望对您有所帮助。
我会通过实施 onBeforeSave
侦听器或 onBeforeConvert
侦听器来实现此目的,详见 the documentation here.
我正在使用 spring-boot-starter-data-mongodb:
构建 spring 启动应用程序我的实体看起来像:
@Document(collection = "nodes")
@Data
@Builder
public class Node {
@Id
UUID id;
String info;
}
和存储库接口:
public interface NodesRepository extends MongoRepository<Node, UUID> {
}
问题是,当我插入具有空 id
字段的节点对象时,应用程序抛出异常并显示以下消息:
Cannot autogenerate id of type java.util.UUID for entity of type model.Node!
我知道开箱即用 spring mongodb 支持自动生成的 String 和 BigInteger id 类型。
所以我想知道是否可以使用 UUID 作为我的 id 字段的类型?我可以为我的实体创建某种类型的自定义 MappingMongoConverter
吗?
您可以通过创建 CustomRepository 来解决这个问题
@NoRepositoryBean
public interface CustomMongoRepository<T extends BaseEntity>
extends MongoRepository<T, Long> {
}
public class CustomMongoRepositoryImpl<T extends BaseEntity>
extends SimpleMongoRepository<T, Long> implements CustomMongoRepository<T> {
CustomMongoRepositoryImpl(
MongoEntityInformation<T, Long> entityInformation,
MongoOperations mongoOperations) {
super(entityInformation, mongoOperations);
}
@Override
public <S extends T> S insert(S entity) {
generateId(entity);
return super.insert(entity);
}
@Override
public <S extends T> List<S> insert(Iterable<S> entities) { ... }
@Override
public <S extends T> S save(S entity) { ... }
@Override
public <S extends T> List<S> save(Iterable<S> entities) { ... }
protected <S extends T> void generateId(S entity) { ... }
}
@SpringBootApplication
@EnableMongoRepositories(repositoryBaseClass = CustomMongoRepositoryImpl.class)
public class Application {
...
}
希望对您有所帮助。
我会通过实施 onBeforeSave
侦听器或 onBeforeConvert
侦听器来实现此目的,详见 the documentation here.