在查询MSSQL数据库时,我有一个在hqlQuery结果中更改的UUID:
6e117f91-4734-2445-a959-ece721413f93
但返回具有修改后的UUID 917f116e-3447-4524-a959-ece721413f93 // correct UUID goes into query
6e117f91-4734-2445-a959-ece721413f93 // modified UUID from the resultset
createQuery("... where UUID = '6e117f91-4734-2445-a959-ece721413f93'").list()
现在,当我使用修改后的UUID进行查询时:
public class LongTypeAdapter extends TypeAdapter<Long>{
@Override
public Long read(JsonReader reader) throws IOException {
if(reader.peek() == JsonToken.NULL){
reader.nextNull();
return null;
}
String stringValue = reader.nextString();
try{
Long value = Long.valueOf(stringValue);
return value;
}catch(NumberFormatException e){
return null;
}
}
@Override
public void write(JsonWriter writer, Long value) throws IOException {
if (value == null) {
writer.nullValue();
return;
}
writer.value(value);
}
}
我找不到对象。
所以我需要将修改后的版本转换回原版(以及其他方式)。我不知道这是一个小的vs大端问题。
答案 0 :(得分:0)
我没有断言这是最好的解决方案,但这是 a 解决方案。这应该将大端编码为小端,反之亦然。
import java.util.UUID;
// ...
public static UUID uuidMarshalIntoMSFormat(UUID uuid)
{
if (uuid == null)
{
throw new IllegalArgumentException("Parameter, uuid cannot be null");
}
final long msbBigEndian = uuid.getMostSignificantBits();
final long msbLittleEndian =
((msbBigEndian & 0x0000_00FF_0000_0000L) << 24) |
((msbBigEndian & 0x0000_FF00_0000_0000L) << 8) |
((msbBigEndian & 0x00FF_0000_0000_0000L) >>> 8) |
((msbBigEndian & 0xFF00_0000_0000_0000L) >>> 24) |
((msbBigEndian & 0x0000_0000_FF00_0000L) >>> 8) |
((msbBigEndian & 0x0000_0000_00FF_0000L) << 8) |
((msbBigEndian & 0x0000_0000_0000_FF00L) >>> 8) |
((msbBigEndian & 0x0000_0000_0000_00FFL) << 8);
return new UUID(msbLittleEndian, uuid.getLeastSignificantBits());
}