gpt4 book ai didi

mongodb - 如何在 MongoDB GORM 中支持嵌入式 map (具有自定义值类型)?

转载 作者:可可西里 更新时间:2023-11-01 10:05:51 32 4
gpt4 key购买 nike

我想要一个由 map 引用的嵌入式文档(如下面的“A 类”)。环境为Grails + GORM + MongoDB。

这可能吗?如果可能,怎么做?

class A { // fails with IllegalArgumentException occurred when processing request: can't serialize class X in line 234 of org.bson.BasicBSONEncoder
static mapWith = "mongo"
Map<String, X> map = new HashMap<String, X>()
}

class B { // works
static mapWith = "mongo"
List<X> list = new ArrayList<X>()
}

class C { // works with primitive type values
static mapWith = "mongo"
Map<String, String> map = new HashMap<String, String>()
}

class X {
String data

public X(String data) {
this.data = data
}
}

最佳答案

正如 Art Hanzel 所建议的那样,嵌入工作非常完美。

但是您的问题来自于您尝试使用 List 通用性作为一种约束的事实:

Map<String, X>

问题是 Grails 不能很好地处理这种语法,首先是因为 Groovy doesn't support genericity .

但是,MongoDB 插件提供了一个非常强大的功能,允许您将自定义类型定义为域类属性:see here .

在你的情况下你可以

class A {
static mapWith = "mongo"
MyClass map = new MyClass()
}

然后在你的 src/java 例如你可以实现一个

class MyClass extends HashMap<String,X> { }

那么当然要定义一个特殊的AbstractMappingAwareCustomTypeMarshaller来指定如何读写DB中的属性。

一个额外的步骤也可以是将自定义验证器添加到类 A 以检查数据的有效性......

关于mongodb - 如何在 MongoDB GORM 中支持嵌入式 map (具有自定义值类型)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11921985/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com