2 回答

TA貢獻1844條經驗 獲得超8個贊
簡短回答
為 的字段添加@EqualsAndHashCode.Exclude
注釋。property
PropertySale
長答案
發生這種情況是因為:
Hibernate 使用的默認實現是,它
Set
HashSet
基于其元素的哈希碼來存儲它們,并且...由于您使用的是 Lombok 的
@Data
注釋,因此哈希碼(以及 equals 和 toString)實現會考慮所有類字段。這意味著Property.hashCode()
調用,反之亦然,導致每當調用它們中的任何一個時都會出現堆棧溢出錯誤(如果您調用或使用這兩個類中的任何一個,PropertySale.hashCode()
也會發生這種情況)。.equals()
.toString()
為了解決這個問題,您有一些可用的選項:
替換
@Data
為@Getter
和@Setter
on class?Property
。由于它不用作 a 內的元素Set
,因此它可能?不需要覆蓋hashCode
/equals
,這與PropertySale
.在字段上添加
@EqualsAndHashCode.Exclude
(and )?,因此不會調用。@ToString.Exclude
PropertySale.property
PropertySale.hashCode
Property.hashCode
編寫您自己的
hashCode
/equals
實現PropertySale
(在這種情況下,Lombok 不會生成它們)而無需調用(例如,Property.hashCode
您仍然可以使用)。Property.id
獎金
正如我提到的,可能會出現同樣的問題,但更正幾乎與/?:?/ 避免/ 自定義實現toString
相同...equals
hashCode
ToString.Exclude
@Data
您還可以編寫單元測試,以確保StackOverflowError
在運行應用程序時這些方法都不會拋出異常。

TA貢獻1793條經驗 獲得超6個贊
快速解決:
更改您的 hashCode 以排除 propertySale。
我在 OneToMany 中遇到了同樣的問題;然后意識到 HashCode 正在無限循環。
您只需要更改 hashCode 方法將其排除,即可解決您的問題。
添加回答
舉報