2 回答

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

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