首页 > 解决方案 > @Column 在 Java + Hibernate 的子类中不起作用

问题描述

这个问题与:

如何使用带有 Hibernate 的 @XmlElement 访问子元素

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

我能够正确获取数据,但是当我插入数据库时​​,我得到的是for0而不是.111area

为什么我的“电话区”和“电话号码”没有出现在我的表格中?

标签: javahibernate

解决方案


您正在使用@Transient注释,这意味着它不会被序列化到数据库中。您可能只是得到一个列默认值0

另一件事是您根本没有使用@Embeddable嵌套对象定义,请检查

您应该有以下嵌套对象;

@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;

另外,我假设您为这些字段定义了 getter、setter ...

另一个问题是使用原始类型时,最好避免它们与实体一起使用。


推荐阅读