我刚才开始使用<forcedType>
能够将enum
用于已知类型。例如,我有
<forcedType>
<name>AdminToolFeatureTypeConverter</name>
<expression>admin_tool_feature_type_id</expression>
</forcedType>
会将admin_tool_featury_type_id
列映射到AdminToolFeatureType
enum
:
public enum AdminToolFeatureType {
BASIC, BASIC_PLUS;
public Long getValue() {
return this.ordinal() + 1L;
}
}
现在问题是我总是将该列称为admin_tool_featury_type_id
,如果它是FOREIGN KEY
,但在表 admin_tool_feature_type
中,此列简称为{{1 }}:
id
这就是我CREATE TABLE admin_tool_feature_type (
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
-- and so on ...
);
上的JOIN
:
admin_tool_add_on_type
问题是Map<AdminToolAddOnType, AdminToolAddOnDTO> fetchMap = this.ctx.select(
ADMIN_TOOL_ADD_ON.ID,
// ..
adminToolAddOnIdToken.field(ADMIN_TOOL_ADD_ON_TYPE.ADD_ON_ID_TOKEN)
)
.from(ADMIN_TOOL_ADD_ON)
// ..
.join(adminToolAddOnIdToken)
.on(adminToolAddOnIdToken.field(ADMIN_TOOL_ADD_ON_TYPE.ADMIN_TOOL_FEATURE_TYPE_ID).eq(adminToolFeatureType)
// ADMIN_TOOL_ADD_ON_TYPE.ID is type Long
// ADMIN_TOOL_ADD_ON.ADMIN_TOOL_ADD_ON_TYPE_ID is type AdminToolAddOnType
.and(adminToolAddOnIdToken.field(ADMIN_TOOL_ADD_ON_TYPE.ID).eq(ADMIN_TOOL_ADD_ON.ADMIN_TOOL_ADD_ON_TYPE_ID)))
的类型为ADMIN_TOOL_ADD_ON_TYPE.ID
,Long
的类型为ADMIN_TOOL_ADD_ON.ADMIN_TOOL_ADD_ON_TYPE_ID
。
现在问题是解决这个问题的最简单方法是什么。我不想将AdminToolAddOnType
重命名为admin_tool_feature_type.id
,因为这会干扰编码标准。
是否有一种简单的方法来扩展admin_tool_feature_type.admin_tool_feature_type_id
,以便生成<forcedType>
作为admin_tool_feature_type.id
类型而不是AdminToolAddOnType
?
我对标题的意思是,是否可以执行以下操作:
Long
我已经尝试过了。
<forcedType>
<name>AdminToolFeatureTypeConverter</name>
<expression>admin_tool_feature_type_id</expression>
<!-- Could be a list of fully qualified names to columns -->
<fullyQualified>
admin_tool_feature_type.id
</fullyQualified>
</forcedType>
但这似乎不可接受。
答案 0 :(得分:1)
刚才发现,如果您阅读文档中的内容,这实际上是可行的:
<forcedType>
<name>AdminToolFeatureTypeConverter</name>
<expression>
my_database.admin_tool_feature_type.id|admin_tool_feature_type_id
</expression>
</forcedType>
必须使用|
代替,
来分隔表达式。我不知道为什么我认为这是逗号分隔。