我开始在我的Android应用程序中使用ORMLite,几乎在每个表中都使用UUID作为主键。
我已经做到了,所以我可以将数据导入和导出到我的服务器应用程序,并确保没有重复。
问题是:我在服务器端编写代码以保存UUID 而不用破折号,因为它可以节省一些空间。 (现在我觉得这不是什么大问题,但改变它会耗费大量时间)。
阅读ORMLite doc,我发现了这个:
java.util.UUID类持久化为VARCHAR类型。它将其保存为uuid.toString()并使用UUID.fromString(String)方法将其再次转换回来。您还可以将UUID字段标记为generate-id,在这种情况下,只要插入它,就会在字段上调用并设置java.util.UUID.randomUUID()。请参见使用generatedId的字段。
toString方法返回带有破折号的UUID,我无法扩展UUID,因为它是最终的。
我需要以某种方式覆盖UUID.toString()或ORMLite的预保存和后查询方法来执行此操作:
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]+)", "$1-$2-$3-$4-$5"));
}
我怎样才能做到这一点?
PS:我使用的是SQLite,列类型是blob。服务器数据库是Mysql,列类型是二进制(16)
答案 0 :(得分:1)
我需要以某种方式覆盖UUID.toString()或ORMLite的预保存和后查询方法来执行此操作:
执行此操作的正确方法(如果您无法修改数据)是使用custom-persister。您可以轻松扩展UuidType并更改sqlArgToJava(...)
和javaToSqlArg(...)
方法,以根据需要添加和删除短划线。
然后你会做类似的事情:
@DatabaseField(persisterClass = MyUuidPersister.class)
private UUID uuid;
你的坚持类就是这样:
public MyUuidPersister extends UuidType {
...
}