Ser*_*aev 10 java spring mongodb spring-data spring-data-mongodb
我正在使用 spring-boot-starter-data-mongodb 构建 spring boot 应用程序:
我有一个看起来像的实体:
@Document(collection = "nodes")
@Data
@Builder
public class Node {
@Id
UUID id;
String info;
}
Run Code Online (Sandbox Code Playgroud)
和存储库界面:
public interface NodesRepository extends MongoRepository<Node, UUID> {
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我插入带有空id
字段的Node 对象时,应用程序抛出异常并显示以下消息:
无法为 model.Node 类型的实体自动生成 java.util.UUID 类型的 id!
我知道开箱即用的 spring mongodb 支持用于自动生成的 String 和 BigInteger id 类型。
所以我想知道是否可以使用 UUID 作为我的 id 字段的类型?我可以MappingMongoConverter
为我的实体创建某种类型的自定义吗?
小智 6
您可以通过创建 CustomRepository 来解决这个问题
@NoRepositoryBean
public interface CustomMongoRepository<T extends BaseEntity>
extends MongoRepository<T, Long> {
}
Run Code Online (Sandbox Code Playgroud)
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) { ... }
}
Run Code Online (Sandbox Code Playgroud)
@SpringBootApplication
@EnableMongoRepositories(repositoryBaseClass = CustomMongoRepositoryImpl.class)
public class Application {
...
}
Run Code Online (Sandbox Code Playgroud)
我希望这是有帮助的。
归档时间: |
|
查看次数: |
9212 次 |
最近记录: |