Правильный способ создания критериев для конкретной связи один-ко-многим с Hibernate

У меня есть эта модель;

@Entity
class Product{
    long id;

    @OneToMany
    private List<ProductFieldValue> fieldValues;
}

@Entity
class ProductFieldValue{
    long id;
    String value;

    @ManyToOne
    Product product;

    @ManyToOne
    ProductField field;
}


@Entity
class ProductField{
    long id;
    @Column(unique=true)
    String name;
}

Я пытаюсь создать запрос, в котором я могу выполнить эти утверждения;

Продукт, у которого есть несколько значений полей с запрошенными полями, например;

(product.fieldValues.value = 'val1' && product.fieldValues.field.name = 'field1') && (product.fieldValues.value = 'val2' && product.fieldValues.field.name = 'field2')

Я дважды пытался ПРИСОЕДИНИТЬСЯ к одной и той же ассоциации с Hibernate, но, похоже, это вызывает исключение.

Как лучше всего добиться этого с помощью критериев или запросов HQL?

Я предполагаю, что ваша модель здесь несколько упрощена, но гарантированно ли ProductField.name будет уникальным? Если нет, я думаю, вам нужно правильно присоединиться, используя уникальные ключи, то есть PK / FK.

Joakim Danielson 27.10.2018 16:57

О, ты прав. Я забыл упомянуть. ProductField.name уникально

paroxit 27.10.2018 17:57
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
17
0

Другие вопросы по теме