0

これが問題です :-) 2 つのクラスがAppointmentありHairdresser、どちらも同じ祖先 (静的な最終的な Key: topParent) を持ち、Key を表し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;
4

1 に答える 1

0

これを見つけました:

これはほぼ間違いなくインデックスの問題です。このクエリを機能させるには、次の 2 つのインデックスを定義する必要があります。

referenceKeyToC の単一プロパティ インデックス {ancestor, referenceKeyToC} の複数プロパティ インデックス Objectify 3.x では、デフォルトでプロパティに単一プロパティ インデックスがありますが、@Unindexed をクラス B に追加した場合は、@ を配置する必要がありますreferenceKeyToC でインデックス付けされます。マルチプロパティ インデックスは、datastore-indexes.xml で定義されます。このクエリを開発モードで実行すると、必要な xml のスニペットが環境から提供されます。

それはトリックをしました!正しい方向を示してくれてありがとう!

于 2012-05-28T19:52:54.867 に答える