JBoss WildFly 11, Hibernate ORM 5.2, OGM 5.3 и MongoDB — массив объектов нулевой длины

У меня есть коллекция и документ MongoDB со встроенным массивом объектов: «qtyContents». Заполняется данными тестовой строки для PoC:

id: 5aa2c7b4aaa32bcb1d7cfc93 ean: "05052319711639" qtyContents: массив 0: количество объектов: "1,1" totalQuantity: "1,2" количествоUom: "1,3" netContents: "1,4" avgMeasure: "1,5" 1: "общий объем" количество: "2,1" количество объектов: "2,1" 2,2" QuantityUom: "2,3" netContents: "2,4" avgMeasure: "2,5"

Моя сущность:

@Entity
@Indexed
@Table(name = "foodsCosmeticsMedicines")
public class FoodsCosmeticsMedicines implements Serializable {

    @ElementCollection
    private List<QtyContents> qtyContentsList;

    //setters & getters
}

и для «Количество содержимого»:

@Embeddable
public class QtyContents implements Serializable {

    private String quantity;
    private String totalQuantity;
    private String quantityUom;
    private String netContents;
    private String avgMeasure;

    //setters & getters
}

Когда я запускаю свой модульный тест, я получаю:

09:44:18,762 INFO [com.notifywell.controller.NOTiFYwellController] (задача по умолчанию-56) >>>>> NOTiFYwellController getAllFoodsCosmeticsMedicinesJSON ..... 09:44:18,764 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] (по умолчанию задание-56)

getAllFoodsCosmeticsMedicinesJSON = 09:44:18,770 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] (задача по умолчанию-56) >>> getAllFoodsCosmeticsMedicinesJSON id = 5aa2c7b4aaa32bcb1d7cfc93 09:44:18,770 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] (default task-56) getAllFoodsCosmeticsMedicinesJSON ean = 05052319711639 09:44:18,771 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] (default task -56) >>>>> getAllFoodsCosmeticsMedicinesJSON description = 09:44:18,771 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] (задача по умолчанию — 56) >>>>> getAllFoodsCosmeticsMedicinesJSON qtyContents = 0 09:44:18,802 INFO [com. notifywell.ejb.FoodsCosmeticsMedicinesEJB] (задача по умолчанию-56) [ { "id": "5aa2c7b4aaa32bcb1d7cfc93", "ean": "05052319711639", "описание": "" } ]

Я получаю коллекцию «FoodsCosmeticsMedicines» из одного:

09:44:18,770 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] (задача по умолчанию – 56) >>>>> getAllFoodsCosmeticsMedicinesJSON foodCosmeticsMedicinesList = 1

но массив qtyContents пуст.

09:44:18,771 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] (задача по умолчанию – 56) >>>>> getAllFoodsCosmeticsMedicinesJSON qtyContents = 0

Где он должен иметь два документа.

Любая идея, что я делаю неправильно с аннотациями для массива/коллекции?


person NOTiFY    schedule 12.03.2018    source источник
comment
Можете ли вы поделиться тестовым случаем где-нибудь? Нам было бы легче проверить, что происходит. Я не вижу ничего явно неправильного в примере   -  person Davide    schedule 13.03.2018
comment
Можете ли вы дать мне место, где я могу разместить ZIP-файл IntelliJ Project?   -  person NOTiFY    schedule 13.03.2018
comment
Обычно мы создаем проекты на github, чтобы иметь возможность клонировать их локально. Может быть, вы можете загрузить его на нашу JIRA? hibernate.atlassian.net/projects/OGM/issues/ С левой стороны есть «+» для создания новых задач. Совместное использование ссылки на Dropbox, Google Диск или что-то еще, что вы используете, также работает   -  person Davide    schedule 13.03.2018


Ответы (1)


Модульный тест просто (используя HTTP GET) вызывает метод в контроллере (аннотированный @model POJO), представленный как веб-служба.

@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("/get-foods-cosmetics-medicines")

Контроллер имеет EJB, @injected в него с использованием CDI. Контроллер вызывает метод во внедренном EJB, который запрашивает базу данных и коллекцию MongoDB и возвращает результат в формате JSON. Распечатка значений моих встроенных сущностей с помощью регистратора.

EJB-метод:

   /**
     * @return String
     */
    public String getAllFoodsCosmeticsMedicinesJSON() {
        logger.info(">>>>> getAllFoodsCosmeticsMedicinesJSON = ");

        Query query = entityManager.createQuery("FROM FoodsCosmeticsMedicines f");
        List<com.notifywell.entity.FoodsCosmeticsMedicines> foodsCosmeticsMedicinesList = query.getResultList();
        logger.info(">>>>> getAllFoodsCosmeticsMedicinesJSON foodsCosmeticsMedicinesList = " + foodsCosmeticsMedicinesList.size());

        for (FoodsCosmeticsMedicines foodsCosmeticsMedicines : foodsCosmeticsMedicinesList) {
            logger.info(">>>>> getAllFoodsCosmeticsMedicinesJSON id = " + foodsCosmeticsMedicines.getId());
            logger.info(">>>>> getAllFoodsCosmeticsMedicinesJSON ean = " + foodsCosmeticsMedicines.getEan());
            logger.info(">>>>> getAllFoodsCosmeticsMedicinesJSON description = " + foodsCosmeticsMedicines.getDescription());

            logger.info(">>>>> getAllFoodsCosmeticsMedicinesJSON getQtyContentsList = " + foodsCosmeticsMedicines.getQtyContentsList());
            logger.info(">>>>> getAllFoodsCosmeticsMedicinesJSON getProductCharacteristics getProductCharacteristics = " + foodsCosmeticsMedicines.getProductCharacteristics().getIsFood());
            logger.info(">>>>> getAllFoodsCosmeticsMedicinesJSON getLifestyle getLifestyle = " + foodsCosmeticsMedicines.getLifestyle().getName());
        }

        Gson gson = getGsonBuilder().create();
        // deserialize
        String json = gson.toJson(foodsCosmeticsMedicinesList);

        logger.info(json);

        return json;
    }

Моя настойчивость.xml

<persistence-unit name="nOTiFYwellMongoDBPersistenceUnit" transaction-type="JTA">

        <provider>org.hibernate.ogm.jpa.HibernateOgmPersistence</provider>

        <properties>
            <property name="jboss.as.jpa.providerModule" value="org.hibernate:5.2"/>
            <property name="wildfly.jpa.hibernate.search.module" value="org.hibernate.search.orm:5.8"/>

            <!-- <property name="hibernate.transaction.jta.platform" value="JBossTS"/> -->
            <!-- <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAS"/> -->
            <property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossStandAloneJtaPlatform"/>
            <property name="hibernate.ogm.datastore.provider" value="org.hibernate.ogm.datastore.mongodb.impl.MongoDBDatastoreProvider"/>
            <property name="hibernate.ogm.datastore.grid_dialect" value="org.hibernate.ogm.datastore.mongodb.MongoDBDialect"/>
            <property name="hibernate.ogm.datastore.database" value="notifyWellDB"/>
            <property name="hibernate.ogm.mongodb.host" value="127.0.0.1"/>
        </properties>
    </persistence-unit>

Выход:

22:25:36,538 INFO [com.notifywell.controller.NOTiFYwellController] (задача по умолчанию 4) >>>>> NOTiFYwellController getAllFoodsCosmeticsMedicinesJSON ..... 22:25:36,541 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] (по умолчанию задача-4) >>>>> getAllFoodsCosmeticsMedicinesJSON = 22:25:36,551 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] (задача-4 по умолчанию) >>>>> getAllFoodsCosmeticsMedicinesJSON foodCosmeticsMedicinesList = 1 22:25:36,551 INFO [com. notifywell.ejb.FoodsCosmeticsMedicinesEJB] (задача по умолчанию-4) >>>>> getAllFoodsCosmeticsMedicinesJSON id = 5aa6bc4340cf3a7178094a8f 22:25:36,551 INFO 05052319711639 22:25:36,551 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] (задача по умолчанию-4)

getAllFoodsCosmeticsMedicinesJSON description = 22:25:36,551 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] (задача 4 по умолчанию) >>>>> getAllFoodsCosmeticsMedicinesJSON getQtyContentsList = [] 22:25:36,552 INFO [com. notifywell.ejb.FoodsCosmeticsMedicinesEJB] (задача по умолчанию-4) >>>>> getAllFoodsCosmeticsMedicinesJSON getProductCharacteristics getProductCharacteristics = 22:25:36,552 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] = (задача по умолчанию-4) getAllFoodsCosmeticsJSONLifeMedicines :36,586 INFO [com.notifywell.ejb.FoodsCosmeticsMedicinesEJB] (задача по умолчанию-4) [ { "id": "5aa6bc4340cf3a7178094a8f", "ean": "05052319711639", "description": "" } ]

Вы можете видеть, что выделенная жирным шрифтом строка показывает пустой массив.

person NOTiFY    schedule 13.03.2018
comment
Это место предполагается использовать для ответов, если у вас есть дополнительные комментарии, вы должны добавить их к вопросу. - person Davide; 13.03.2018