Морфия равна игнорированию полей

У меня есть класс следующим образом:

@Entity 
public class Wrap{
    private Metadata meta;
    // And more ...
}
public class Metadata{
    private List<Image> images;
    private String price;
    private Integer value;
    // And more ...
}
public class Image  {
    private String url;
    private String hash;
    @Override
    public int hashCode() {
        int h = 7;
        h = 89 * h + Objects.hashCode(this.hash);
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final Image other = (Image) obj;
        return (!Objects.equals(this.hash, other.hash));
    }
}

Обычный запрос ds.createQuery(Wrap.class).field("meta").equal(otherMetadata); будет сравнивать все поля (как и ожидалось).

Как видно из кода, класс Image переопределяет equals&hashcode, чтобы игнорировать поле url. Это работает для Java. Но есть ли способ в morphia запрашивать (используя .equal или .filter или что-то еще), игнорируя некоторые поля?


person Didac Montero    schedule 22.04.2014    source источник


Ответы (1)


equal() — это сравнение в MongoDB. equals() - это сравнение в Java. Эти двое не взаимодействуют.

Вам нужно составить более сложный запрос к базе данных с .field("meta.price").equal(meta.getPrice()) и так далее.

person xeraa    schedule 22.04.2014
comment
Я знаю, что равные и равные разные. Я просто хотел подчеркнуть, как я сделал это для Java. И ваше решение - это то, о чем я думал... но, поскольку мой объект довольно сложен, а также простирается от других, я вообще не думаю, что это хорошее решение. - person Didac Montero; 22.04.2014
comment
Если вам это нужно для многих сущностей, вы, вероятно, могли бы извлечь информацию с помощью отражений и автоматически генерировать запросы к базе данных. К сожалению, я не знаю готового решения. - person xeraa; 22.04.2014
comment
Morphia использует отражения для создания запроса, который я опубликовал. Я мог бы добавить аннотацию и не добавлять эти свойства в запрос. Я просто подумал, может уже есть что-то подобное - person Didac Montero; 23.04.2014