遅い答えですが、ゲッターメソッドをオーバーライドすることは堅実なアプローチだと思います。
これは、id フィールドを持つすべてのテーブルのスーパークラスになることができます。このオブジェクトを JSON にシリアル化すると、ID が常に表示されます。
@MappedSuperclass
class ModelEntity {
@Id
@Column(
name = "id",
updatable = false,
nullable = false
)
@GeneratedValue(strategy=GenerationType.AUTO)
public Long id
}
しかし、次のオブジェクト (テーブル)がPerson
あり、Occupation
wherePerson
と 1 対多の関係があるとし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"
}
}