@Column не работает в подклассах в Java + Hibernate - PullRequest
0 голосов
/ 16 ноября 2018

Этот вопрос относится к:

Как получить доступ к дочернему элементу с помощью @XmlElement с Hibernate

XML

<person>
    ...

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

У меня есть класс, который можно распаковать из XML

@XmlRootElement(name="person")
@XmlAccessorType(XmlAccessType.FIELD)
@Entity
@Table(name = "person", schema = "test")
public class UserLinkedIn {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    int id;
    // ...

    @XmlElement(name = "name")
    @Column(name = "name")
    int name; // this works, I get the name in my database

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

    @XmlRootElement(name = "phone")
    static class Phone {
        @XmlElement(name = "area")
        @Column(name = "phone-area")
        int area; // is 111

        @XmlElement(name = "number")
        @Column(name = "phone-number")
        int number; // is 123-4567
    }
}

Мой стол:

table:
    id
    name
    phone-area
    phone-number

Я могу получить данные правильно, но когда я вставляю в свою базу данных, я получаю 0 вместо 111 для area.

Почему мои "телефонная зона" и "номер телефона" не заполняются в моей таблице?

1 Ответ

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

Вы используете аннотацию @Transient, что означает, что она не будет сериализована в дБ. Вы просто получаете значение столбца по умолчанию 0, вероятно.

Другое дело, что вы вообще не используете @Embeddable определение вложенного объекта, отметьте this

У вас должен быть следующий вложенный объект;

@Embeddable
@XmlRootElement(name = "phone")
public static class Phone {

    @XmlElement(name = "area")
    @Column(name = "phone-area")
    private Integer area;

    @XmlElement(name = "number")
    @Column(name = "phone-number")
    private Integer number;

    // getter, setters
}

С @Embedded на его объявлении в родительской сущности;

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

Кроме того, я предполагаю, что у вас есть геттеры, сеттеры, определенные для этих полей ...

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...