Objectify:如何将具有字符串 ID 的实体迁移到长 ID
Objectify : How to Migrate an Entity with a String ID to a Long ID
我正在尝试将带有字符串 @Id 的实体 class 更改为带有长 @Id 的 class,这里是 class:
@Entity
public class MyClass extends EntityBaseString{
private static final long serialVersionUID = 1L;
private Ref<MyClass> parent;
private List<Ref<MyClass>> list = new ArrayList<Ref<MyClass>>();
public MyClass(){}
//getters and setters omited
}
我想要的是将 superclass 从 EntityBaseString
更改为 EntityBaseLong
,但我想知道更好的方法是什么?
我试图将它复制到另一个名为 MyClassV2
的实体,它扩展了 EntityBaseLong
,并且我已经将 MyClass
个实体复制到 MyClassV2
个实体。但问题是 MyClass
实体在许多其他实体上被引用,因此如果我使用 MyClassV2
.
,则需要对模型进行大量更改
我正在使用 Objectify v4。
目前没有关于此的好故事。更改对象标识很难,因为它实际上代表了复制和删除操作。 Objectify 目前不会原谅尝试将 Long id 加载到 String id 中,反之亦然......这样做是危险的,因为加载然后保存操作实际上是复制操作。
唯一优雅地远程处理此问题的方法是允许将@Id 字段指定为Object,并让它为Long 或String。然后你就可以自己管理copy/delete了。 Objectify 目前不允许这样做,但您可以请求它作为增强功能:https://github.com/objectify/objectify/issues
我正在尝试将带有字符串 @Id 的实体 class 更改为带有长 @Id 的 class,这里是 class:
@Entity
public class MyClass extends EntityBaseString{
private static final long serialVersionUID = 1L;
private Ref<MyClass> parent;
private List<Ref<MyClass>> list = new ArrayList<Ref<MyClass>>();
public MyClass(){}
//getters and setters omited
}
我想要的是将 superclass 从 EntityBaseString
更改为 EntityBaseLong
,但我想知道更好的方法是什么?
我试图将它复制到另一个名为 MyClassV2
的实体,它扩展了 EntityBaseLong
,并且我已经将 MyClass
个实体复制到 MyClassV2
个实体。但问题是 MyClass
实体在许多其他实体上被引用,因此如果我使用 MyClassV2
.
我正在使用 Objectify v4。
目前没有关于此的好故事。更改对象标识很难,因为它实际上代表了复制和删除操作。 Objectify 目前不会原谅尝试将 Long id 加载到 String id 中,反之亦然......这样做是危险的,因为加载然后保存操作实际上是复制操作。
唯一优雅地远程处理此问题的方法是允许将@Id 字段指定为Object,并让它为Long 或String。然后你就可以自己管理copy/delete了。 Objectify 目前不允许这样做,但您可以请求它作为增强功能:https://github.com/objectify/objectify/issues