Org.hibernate.QueryException: не удалось разрешить свойство, если свойство не присутствует в виде столбца

Получение следующего исключения:

Caused by: org.hibernate.QueryException: could not resolve property: primaryAddress of: com.hcentive.user.ContactInfo at org.hibernate.persister.entity.AbstractPropertyMapping.propertyException(AbstractPropertyMapping.java:62) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.persister.entity.AbstractPropertyMapping.toType(AbstractPropertyMapping.java:56) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.persister.entity.AbstractEntityPersister.getSubclassPropertyTableNumber(AbstractEntityPersister.java:1805) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.persister.entity.BasicEntityPropertyMapping.toColumns(BasicEntityPropertyMapping.java:46) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.persister.entity.AbstractEntityPersister.toColumns(AbstractEntityPersister.java:1780) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumns(CriteriaQueryTranslator.java:510) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.loader.criteria.CriteriaQueryTranslator.getColumnsUsingProjection(CriteriaQueryTranslator.java:469) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.criterion.Order.toSqlString(Order.java:109) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.loader.criteria.CriteriaQueryTranslator.getOrderBy(CriteriaQueryTranslator.java:414) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.loader.criteria.CriteriaJoinWalker.(CriteriaJoinWalker.java:106) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.loader.criteria.CriteriaJoinWalker.(CriteriaJoinWalker.java:75) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.loader.criteria.CriteriaLoader.(CriteriaLoader.java:80) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1773) ~[hibernate-core-5.1.0.Final.jar:5.1.0.Final] at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:363)

при сортировке столбца адреса в таблице данных, который определяется как:

{
                            "mData": function (customer) {
                                var address = customer.userProfile.contactInfo.primaryAddress;
                                return address ? address.displayString : "";

                            },
                            "aTargets": [4],
                            "sName": "userProfile.contactInfo.primaryAddress",
                            "sClass": "wrapWord100"
                         },

primaryAddress присутствует как получатель в объекте ContactInfo.java

public Address getPrimaryAddress() {
    for (Address add : addresses) {
        if (null != add && AddressTypeEnum.Primary.toString().equals(add.getType())) {
            return add;
        }
    }
    return null;
}
private Set<Address> addresses = new HashSet<Address>();

Ошибка может быть вызвана тем, что «primaryAddress» отсутствует в столбце «ContactInfo». Как решить эту проблему.

    @Entity
    @Table(name = "CONTACT_INFO")
    public class ContactInfo extends Persistent {

    private Set<Address> addresses = new HashSet<Address>();

    @Valid
        public Address getPrimaryAddress() {
            for (Address add : addresses) {
                if (null != add && AddressTypeEnum.Primary.toString().equals(add.getType())) {
                    return add;
                }
            }
            return null;
        }
}

primaryAddress не входит в ваш ContactInfo, верно? Если да, это нормально, что Hibernate выдал это исключение.

nguyentt 26.09.2018 10:48

getter и setter присутствуют для primaryAddress в ContactInfo и также отображаются в таблице данных в пользовательском интерфейсе: userProfile.contactInfo.primaryAddress. Как исправить исключение без значительного изменения кода?

Blue Moon 26.09.2018 11:18

Не могли бы вы предоставить код ContactInfo?

nguyentt 26.09.2018 11:22

Прикрепил сниппет.

Blue Moon 26.09.2018 11:31

Хорошо, в вашем ContactInfo только один участник: адреса. Он будет считаться столбцом в вашей таблице contactInfo. В противном случае primaryAddress не является членом, хотя вы назвали его сеттером и получателем.

nguyentt 26.09.2018 11:34

Прошу прощения за то, что не очень хорошо понимаю, что вы видите проблему. Почему бы вам не добавить участника primaryAddess в свой класс contactInfo?

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

Ответы 1

Вам нужно изменить свой запрос на это. Также это вернет список адресов, а не один адрес.

"mData": function (customer) {
                                var address = customer.userProfile.contactInfo.addresses;
                                return address ? address.displayString : "";

                            },
                            "aTargets": [4],
                            "sName": "userProfile.contactInfo.addresses",
                            "sClass": "wrapWord100"
                         },

Мне нужен только основной адрес. Как будет работать сортировка, если есть несколько адресов?

Blue Moon 27.09.2018 07:32

Вам нужно покинуть соединение, а затем проверить основное условие в предложении where.

Pooja Aggarwal 27.09.2018 08:28

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