ORMLite (Android) - 在保留之前删除 UUID 破折号

ORMLite (Android) - Removing UUID dashes before persist

我开始在我的 Android 应用程序中使用 ORMLite,该应用程序几乎在每个 table.

中都使用 UUID 作为主键

我已经做到了,所以我可以将数据导入和导出到我的服务器应用程序并确保没有重复。

问题是:我在服务器端编写了代码来保存 UUID 没有破折号,因为它可以保存一些 space。 (现在看来没什么大不了的,但改起来会很费时间)

阅读 ORMLite doc,我发现了这个:

The java.util.UUID class persisted as a VARCHAR type. It saves it as the uuid.toString() and used the UUID.fromString(String) method to convert it back again. You can also mark a UUID field as being generated-id in which case whenever it is inserted, java.util.UUID.randomUUID() is called and set on the field. See section Fields With generatedId.

toString 方法 return 带破折号的 UUID,我无法扩展 UUID,因为它是最终的。

我需要以某种方式覆盖 UUID.toString() 或 ORMLite 的预保存和 post 查询方法来执行此操作:

public static String getStringUUID(UUID valor) {
    if (valor == null) {
        return null;
    }
    return valor.toString().replaceAll("-", "");
}

public static UUID getValorUUID(String valor) {
    if (valor == null) {
        return null;
    }
    return UUID.fromString(valor.replaceFirst("([0-9a-fA-F]{8})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]{4})([0-9a-fA-F]+)", "----"));
}

我怎样才能做到这一点?

PS: 我正在使用 SQLite,列类型是 blob。服务器数据库为Mysql,列类型为binary(16)

I need to, somehow, override UUID.toString() or the pre-save and post-query method of ORMLite to do this:

执行此操作的正确方法(如果您无法修改数据)是使用 custom-persister. You could easily extend the UuidType 并更改 sqlArgToJava(...)javaToSqlArg(...) 方法以添加和删除根据需要使用破折号。

然后你会做这样的事情:

@DatabaseField(persisterClass = MyUuidPersister.class)
private UUID uuid;

你的坚持者 class 会是这样的:

public MyUuidPersister extends UuidType {
    ...
}