我将jOOQ与普通SQL(不是生成的代码)一起使用。我试图直接选择一个POJO,它有一些enum类型的字段。
MyType pojo = context.select().from(table("Table"))
.where(field("ID").equal("1")).fetchOne()
.into(MyType.class);
在我看来,我只能为我的整个POJO指定一个高级映射器,如下所示:
MyType pojo = context.select().from(table("Table"))
.where(field("ID").equal("1")).fetchOne()
.map(new RecordMapper<Record, MyType>() {
@Override
public MyType map(Record record) {
...
}
});
我找不到仅为某些字段提供映射或转换器的方法。具体来说,我想告诉jooq“正常转换所有字段,除非我的POJO中的字段是MyEnum类型的,在这种情况下使用这个映射(或转换器)”。
如何为某些字段而不是其他字段指定映射器?
顺便说一句,我注意到我可以在配置级别做类似的事情,用通配符匹配数据库字段名称(如这里所述),但是我认为如果由POJO中字段的类型驱动决策会更好。
有不同的方法来解决这个问题:
很明显。我知道你没有用它,但也许发现这个问题的人会。在这种情况下,代码生成器将:
即使您没有使用代码生成器,您也可以通过指定自己的
DataType
从自定义转换器/绑定中获益:
// Assuming that the enum type enumerates varchar values:
SQLDataType<MyEnum> myEnumType =
SQLDataType.VARCHAR.asConvertedDataType(new MyEnumConverter());
现在,您可以使用DSL在普通SQL
Field
表达式中使用该类型。字段(字符串、数据类型)
context.select(field("Column", myEnumType), ...)
.from(table("Table"))
在这种情况下,不再需要在记录映射器中进行显式转换,因为jOOQrecord
将已经包含所需的数据类型。
如果使用任何into(Class)
方法,默认情况下,使用DefaultRecordMapper
。它知道如何将字符串转换为枚举通过调用ENumClass.valueOf(stringValue)
。如果这不是所需的行为(如您的问题所示),那么您仍然可以通过提供自己的RecordMapperProvider
来覆盖默认行为。
这也是你所说的“高级映射器”,但是你可以全局注册它,并在任何你想映射到MyType.class的时候重用它。
jOOQ的未来版本(还不是jOOQ 3.9)可能支持转换器注册表,该注册表允许对任何类型
默认情况下,MapStruct映射源和目标的所有属性,如果它们具有相同的名称。中的元素可用于省略任何字段映射。但那不是我想要的。我想控制映射策略。我想指定如下内容: 现在,这个映射仅仅意味着将id和名称从源映射到目的地。除非在mappings注释中指定,否则不应映射其他字段。
我正在使用Hibernate 4.1和Notess从Java映射到DB。 我有一个超类,它的属性是使用<code>@MappedSuperClass</code>映射的。 这个类有很多子类,但是有些属性对某些子类无效,因此我不想将它们映射到这些子类的数据库中。 有什么方法可以实现这一点吗? 另外,我不确定这是否是正确的设计,其中只有超类的属性子集适用于子类?我也愿意改变设计,如果有人能给我一个有效
我知道这是一个非常简单的问题,但我似乎找不到一个令人满意的答案。另外,我对Mongo完全是个新手。这显然无济于事。 假设我收藏了...我希望将mongo中的$toupper函数应用于具有_id和的记录的字段,而不是应用于具有的记录。 我一直在玩Mongo的聚合(针对我在google中发现的),但我得到的最多的是一个返回“name”字段的查询,但是: 它返回数据库中的所有记录(不仅是ObjectId
问题内容: 有没有一种使用Jackson JSON Processor进行自定义字段级序列化的方法?例如,我想上课 序列化为以下JSON: 请注意,age = 25被编码为 数字, 而favoriteNumber = 123被编码为 string 。开箱即用的杰克逊将集结到一个号码。在这种情况下,我希望将favoriteNumber编码为字符串。 问题答案: 您可以实现自定义序列化器,如下所示:
问题内容: 我正在使用Elasticsearch索引我的文档。 是否有可能指示它仅返回特定字段,而不是它存储的整个json文档? 问题答案: 是的 使用源过滤器。如果您使用JSON搜索,它将看起来像这样: 在ES 2.4及更低版本中,您还可以在search API中 使用fields选项: ES 5+中已弃用此功能。而且,源过滤器更强大!
运行查询后,我从MongoDB返回一个JSON值。问题是我不想返回与我的返回相关的所有JSON,我尝试搜索文档,但没有找到正确的方法。我想知道如果可能的话会怎样,如果可能的话,正确的做法是什么。示例:在数据库中 如果某个字段为用户存在,但不返回另一个字段,那么返回该字段的正确方式是什么。对于上面的示例,我想返回RMS的字段和扎克伯格的字段。这就是我试图找到的字段是否为空,但它似乎不起作用。