我有一個像下面這樣的課程。
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@EqualsAndHashCode
@Entity
@Table( name = "hires", indexes = { @Index( name = "idx_hire_date", columnList = "date DESC" ) }, uniqueConstraints = {
@UniqueConstraint( columnNames = { "vehicle_id", "po_number" } ) } )
@DynamicUpdate
@JsonIdentityInfo( generator = ObjectIdGenerators.PropertyGenerator.class, property = "id" )
public class Hire implements Serializable {
@Id
@GeneratedValue( strategy = GenerationType.IDENTITY )
int id;
@OneToOne( targetEntity = Driver.class, fetch = FetchType.EAGER )
@JoinColumn( name = "pass_payer", referencedColumnName = "id", nullable = true )
Driver passPayer;
@OneToOne( targetEntity = Driver.class, fetch = FetchType.EAGER )
@JoinColumn( name = "driver_id", referencedColumnName = "id", nullable = true )
Driver driver;
...
}
我通過 Rest 端點得到這個物件。問題是當欄位passPayer和driver物件相等時,在回傳的 JSON 中,driver欄位只包含 ID(它只是一個整數值),而passPayer欄位包含所有物件欄位。
"passCost": 300.0,
"passPayer": {
"id": 9,
"firstName": "XXXX",
"lastName": "XXXXXX",
"idNo": "000000000000"
},
"driver": 9,
"driverSalary": xxxx.xx,
當這些欄位具有不同的物件時,兩個欄位都會顯示完整的詳細資訊,如下所示。
"passCost": 300.0,
"passPayer": {
"id": 9,
"firstName": "XXXX",
"lastName": "XXXXXX",
"idNo": "000000000000"
},
"driver": {
"id": 4,
"firstName": "YYYYYY",
"lastName": "YYYYYYY",
"idNo": "10101010101"
},
"driverSalary": 00000.00,
我需要兩個物件都包含資料(欄位。[id,firstName,lastName,idNo]),無論它們是否相等。
任何線索表示贊賞!
uj5u.com熱心網友回復:
這是由 引起的@JsonIdentityInfo( generator = ObjectIdGenerators.PropertyGenerator.class, property = "id" ),請查看檔案。參考:
用于指示帶注釋的型別或屬性的值應該是序列化的注釋,以便實體包含額外的物件識別符號(除了實際的物件屬性),或者作為由參考完整序列化的物件 id 組成的參考。
由于兩個欄位都參考同一個物件,因此第二個欄位被序列化為對第一個物件的參考。
以我的經驗,這個注解主要用于處理回圈參考,所以你可以:
- 如果您的用例允許,請洗掉它(物件中沒有回圈參考)
- 或者您可以使用 DTO(無論如何這是首選方法)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/485714.html
