迟到的答案,但我认为覆盖 getter 方法是一种可靠的方法。
这可以是所有具有 id 字段的表的超类。如果将此对象序列化为 JSON,则 id 将始终出现。
@MappedSuperclass
class ModelEntity {
@Id
@Column(
name = "id",
updatable = false,
nullable = false
)
@GeneratedValue(strategy=GenerationType.AUTO)
public Long id
}
但是,假设您有以下对象(表)Person
,并且Occupation
wherePerson
与Occupation
.
@Entity
@Table(name = "occupation")
Occupation extends ModelEntity {
@Column
String company
@Column
String position
}
@Entity
@Table(name = "person")
Person extends ModelEntity {
@Column
String name
@OneToMany
Occupation occupation
}
ModelEntity
如果要序列化一个对象,如果所有扩展的类中都存在 id Person
,你会得到类似的东西:
{
"id" : 1,
"name" : "Jordan",
"occupation" : {
"id" : 1,
"company" : "WalMart",
"position" : "Engineer"
}
}
如果您不希望 id 出现在Occupation
对象中,但确实希望它出现在对象中,则可以在类级别Person
实现一个getId()
方法,并应用所需的注释:Occupation
@Transient
public Long getId() {
return id;
}
现在您的 JSON 将如下所示:即使它们在实际数据库中都有一个 id 列:
{
"id" : 1,
"name" : "Jordan",
"occupation" : {
"company" : "WalMart",
"position" : "Engineer"
}
}