gpt4 book ai didi

java - 对象化4订单?

转载 作者:行者123 更新时间:2023-12-01 14:58:15 26 4
gpt4 key购买 nike

我升级了我的应用程序以使用 Objectify4,但我无法让排序正常工作。这是我所做的:我有一个类(class) Offer 我想查询。此类是从 Mail 和 Model 扩展而来的。订单的属性应该是邮件类中索引的日期时间。

import com.googlecode.objectify.annotation.EntitySubclass;
import com.googlecode.objectify.annotation.Serialize;

@EntitySubclass(index=true)
public class Offer extends Mail {

private static final long serialVersionUID = -6210617753276086669L;
@Serialize private Article debit;
@Serialize private Article credit;
private boolean accepted;
...
}

import com.googlecode.objectify.annotation.EntitySubclass;
import com.googlecode.objectify.annotation.Index;

@EntitySubclass(index=true)
public class Mail extends Model {
private static final long serialVersionUID = 8417328804276215057L;
@Index private Long datetime;
@Index private String sender;
@Index private String receiver;
...}

import java.io.Serializable;
import com.googlecode.objectify.annotation.Entity;
import com.googlecode.objectify.annotation.Id;
import com.googlecode.objectify.annotation.Ignore;
import com.googlecode.objectify.annotation.Index;

@Entity
public class Model implements Serializable {
private static final long serialVersionUID = -5821221296324663253L;
@Id Long id;
@Index String name;
@Ignore transient private Model parent;
@Ignore transient private boolean changed;
...}


import com.googlecode.objectify.Objectify;
import com.googlecode.objectify.ObjectifyService;

public class DatabaseService {
static {
ObjectifyService.register(Model.class);
ObjectifyService.register(Mail.class);
ObjectifyService.register(Offer.class);
}

public static Objectify get() {
return ObjectifyService.ofy();
}
}

这就是我想做的:

Query<Offer> result = DatabaseService.get().load().type(Offer.class).order("-datetime");

不幸的是,结果始终未排序。

有没有人指点一下?

最佳答案

在底层,此加载操作有两个部分:

  • 按 ^i = 优惠过滤
  • 按日期时间描述排序

为了使其工作,您将需要一个像这样的多属性索引:

<datastore-index kind="Model" ancestor="false">
<property name="^i" direction="asc"/>
<property name="datetime" direction="desc"/>
</datastore-index>

但是,您几乎可以肯定通过使所有实体扩展多态模型来滥用数据存储。如果您尝试将所有实体塞入单一种类,您将来将会遇到许多问题;一方面,几乎每个查询都需要一个包含鉴别器的多属性索引。

您可以有一个公共(public)基类,只是不要将其设为 Kind 。保留继承层次结构,但将 @Entity 向上移动到(例如)Mail。如果你想要一个真正的多态层次结构,Offer 仍然可以有 @EntitySubclass。

仔细阅读 objectify Concepts 文档并仔细选择您的类型。

关于java - 对象化4订单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14066381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com