Как получить доступ к дочернему элементу, используя @XmlElement с Hibernate - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть таблица:

table:
    id
    name
    phone-area
    phone-number

Этот XML

<person>
    ...

    <phone>
        <area>111</area>
        <number>123-4567</number>
    </phone>

</person>

и этот код:

@XmlRootElement(name="person")
@XmlAccessorType(XmlAccessType.FIELD)
@Entity
@Table(name = "person", schema = "test")
public class UserLinkedIn {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    int id;
    // ...

    @XmlElement(name = "area")
    @XmlElementWrapper(name="phone")
    @Column(name = "phone-area")
    double area; 

    @XmlElement(name = "number")
    @XmlElementWrapper(name="phone")
    @Column(name = "phone-number")
    double number;
}

Но когда я запускаю его, я получаю эту ошибку:

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
@XmlElementWrapper is only allowed on a collection property but "com.myproject.user.person" is not a collection property.
    this problem is related to the following location:
        at @javax.xml.bind.annotation.XmlElementWrapper(namespace=##default, name=phone, required=false, nillable=false)

Я думал, что аннотация "оболочки" позаботится об элементе оболочки, чтобы получить дочернее значение. Я что-то пропустил?

** Я не могу изменить ни схему, ни файл xml.

1 Ответ

0 голосов
/ 16 ноября 2018

Я нашел решение

Мне пришлось создать еще один класс "телефон" и сопоставить значения для каждого элемента

так в моем основном классе:

@Transient
@XmlElement(name = "phone")
private Phone phone;

Тогда в моем новом классе

@XmlRootElement(name = "phone")
static class Phone {
    @XmlElement(name = "area")
    @Column(name = "area")
    int area;
    @XmlElement(name = "number")
    @Column(name = "number")
    int number;

    // here area = 111
    // pnumber = 123-4567
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...