我试图实现一对一关系bw 3实体,但面临这个散列码相关的错误。我有3个类在2类我试图访问一个companyaccessright实体。
公司访问权限-
@Entity
@Table(name = "company_access_rights")
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class CompanyAccessRights{
}
@Entity
@Table(name = "companies")
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class Company{
@OneToOne
@JoinColumn(name = "company_access_rights")
private CompanyAccessRights companyAccessRights;
}
@Entity
@Table(name = "company_employment_settings")
@Data
@EqualsAndHashCode(callSuper = true)
@NoArgsConstructor
public class CompanyEmploymentSettings{
@OneToOne
@JoinColumn(name = "company_access_rights")
private CompanyAccessRights companyAccessRights;
}
ERROR [28.02.2023 11:12:10,974]: [] [] org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Filter execution threw an exception] with root cause
java.lang.StackOverflowError: null
at ch.talmatch.app.domain.company.Company.hashCode(Company.java:19) ~[classes/:?]
at ch.talmatch.app.domain.company.CompanyEmploymentSettings.hashCode(CompanyEmploymentSettings.java:33) ~[classes/:?]
at ch.talmatch.app.domain.company.Company.hashCode(Company.java:19) ~[classes/:?]
at ch.talmatch.app.domain.company.CompanyEmploymentSettings.hashCode(CompanyEmploymentSettings.java:33) ~[classes/:?]
at ch.talmatch.app.domain.company.Company.hashCode(Company.java:19) ~[classes/:?]
at ch.talmatch.app.domain.company.CompanyEmploymentSettings.hashCode(CompanyEmploymentSettings.java:33) ~[classes/:?]
at ch.talmatch.app.domain.company.Company.hashCode(Company.java:19) ~[classes/:?]
at ch.talmatch.app.domain.company.CompanyEmploymentSettings.hashCode(CompanyEmploymentSettings.java:33) ~[classes/:?]
at ch.talmatch.app.domain.company.Company.hashCode(Company.java:19) ~[classes/:?]
at ch.talmatch.app.domain.company.CompanyEmploymentSettings.hashCode(CompanyEmploymentSettings.java:33) ~[classes/:?]
at ch.talmatch.app.domain.company.Company.hashCode(Company.java:19) ~[classes/:?]
at ch.talmatch.app.domain.company.CompanyEmploymentSettings.hashCode(CompanyEmploymentSettings.java:33) ~[classes/:?]
at ch.talmatch.app.domain.company.Company.hashCode(Company.java:19) ~[classes/:?]
at ch.talmatch.app.domain.company.CompanyEmploymentSettings.hashCode(CompanyEmploymentSettings.java:33) ~[classes/:?]
at ch.talmatch.app.domain.company.Company.hashCode(Company.java:19) ~[classes/:?]
at ch.talmatch.app.domain.company.CompanyEmploymentSettings.hashCode(CompanyEmploymentSettings.java:33) ~[classes/:?]
at ch.talmatch.app.domain.company.Company.hashCode(Company.java:19) ~[classes/:?]
at ch.talmatch.app.domain.company.CompanyEmploymentSettings.hashCode(CompanyEmploymentSettings.java:33) ~[classes/:?]
2条答案
按热度按时间goqiplq21#
问题不在于
CompanyAccessRights
,而在于两者:Company
包含对CompanyEmploymentSettings
和Company
的引用lomboks
@EqualsAndHashCode
通过在所有复杂类型字段上调用hashCode()
方法来计算散列码,所以问题是CompanyEmploymentSettings.hashCode()
调用Company.hashCode()
,然后Company.hashCode()
调用CompanyEmploymentSettings.hashCode()
,一次又一次,直到您使用了所有堆栈内存-StackOverflowException。要解决此问题,您可以移除其中一个字段,也可以使用
@EqualsAndHashCode.Exclude
标记这些字段以在hashCode计算中排除此字段bweufnob2#
尝试使用
fetch = FetchType.LAZY
作为@OneToOne
关系;希望它能解决你的问题。