java - @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
而不是.111
area
为什么我的“电话区”和“电话号码”没有出现在我的表格中?
解决方案
您正在使用@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 ...
另一个问题是使用原始类型时,最好避免它们与实体一起使用。
推荐阅读
- database - 访问查询条件不允许显示所有记录
- python - 如何去除某些瓷砖纹理的黑色
- python - 使用 Behave 进行测试 - 找不到模块
- reactjs - React.Children.only 期望接收单个 React 元素 chil
- python - PyQt5如何修改多个QLineEdit?
- php - 如何从另一个文件的表单中获取值?
- c# - 如何在 Visual Studio 中禁用创建非英文文本变量
- javascript - 在弹出模式中阻止滚动
- android-studio-3.3 - 错误:无法初始化类 com.android.build.gradle.AppPlugin 是问题
- javascript - Javascript:使用引用函数的对象导出数组