客观化Google DataStore查询

时间:2012-05-28 10:19:15

标签: java objectify

这是事情:-) 我们有两个类AppointmentHairdresser,两个类都有相同的,一个祖先(静态最终键:topParent)代表HairSalon键。 Appointment包含Hairdresser,如下所示:

    @Parent
    public Key parent; 
    public Key hairdresserKey;`


但是当我们试图过滤掉约会时,它没有得出结果。 hairdresserKey == null中的父母,这可能是一个线索,但我们现在已经陷入困境。

有人可以告诉我们这个查询有什么问题吗?

非常感谢!

        appointment.hairdresserKey = new Key<Hairdresser>(topParent, Hairdresser.class, appointment.hairdresser.id);
    appointment.parent = topParent;

    Key<Hairdresser> queryKey = new Key<Hairdresser>(topParent, Hairdresser.class, appointment.hairdresser.id);

    Objectify ofyTransaction = ObjectifyService.beginTransaction();
    try {

        List<Key<Appointment>> previousTimeSlotOneHour = ofyTransaction.query(Appointment.class)
                .ancestor(topParent)
                .filter("hairdresserKey", appointment.hairdresserKey)
                .filter("timeSlot", appointment.timeSlot.getPreviousTimeSlot())
                .filter("LENGTH", 1.0d).listKeys();

要清除更多,这就是约会的设置方式:

@Unindexed

public class Appointment实现Serializable {

@Id
public Long id;
@Indexed
public TimeSlot timeSlot;

@Transient
public WorkDay workDay;

@Transient
public Customer customer;
public Key customerKey;

public int END_TIME_HOUR;
public int END_TIME_MINUTES;

@Indexed
public TREATMENT treatment = TREATMENT.TREATMENT_CUT;
public int revisionNumber = -1;

/* QUERY Fields */
@Indexed
private String stringDate;
private double LENGTH;

@Parent
public Key parent;
private Date date;

@Transient
public Hairdresser hairdresser;
public Key hairdresserKey;

1 个答案:

答案 0 :(得分:0)

发现这个:

这几乎肯定是一个索引问题。为了使该查询起作用,您必须定义两个索引:

referenceKeyToC上的单属性索引 {ancestor,referenceKeyToC}上的多属性索引 在Objectify 3.x中,属性默认具有单属性索引,但如果已将@Unindexed添加到B类,则需要将@Indexed放在referenceKeyToC上。 多属性索引在datastore-indexes.xml中定义。如果您以开发模式运行此查询,环境应该为您提供所需的xml片段。

这就是诀窍!谢谢你指出了正确的方向!