You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
record 키워드를 사용하면 equals(), hashCode() 오버라이딩 없이 값 비교가 가능하지 않을까?
다음과 같은 boilerPlate 코드를 없애고싶다.
@Overridepublicbooleanequals(Objecto) {
if (this == o) returntrue;
if (o == null || getClass() != o.getClass()) returnfalse;
Addressaddress = (Address) o;
returnObjects.equals(country, address.country) && Objects.equals(city, address.city) && Objects.equals(street, address.street) && Objects.equals(zipCode, address.zipCode);
}
@OverridepublicinthashCode() {
returnObjects.hash(country, city, street, zipCode);
}
record 키워드 적용 실패
publicrecordAddress(Stringcountry, Stringcity, Stringstreet, StringzipCode) {
//⚠️ Non-canonical record constructor must delegate to another constructorpublicAddress() {
}
}
기본 생성자를 record 키워드에 적용할 수 없다.
원인
JPA의 Entity class 는 모두 protected 또는 public 의 기본 생성자를 가져야만함.
별도의 생성자 정의 시도시 Non-canonical record constructor must delegate to another constructor 에러 발생
=> record 타입에 JPA 가 요구하는 파라미터가 없는 기본 생성자 정의 불가능
=> JPA 가 정상적으로 인식할 수 없음.
결론
JPA Entity 에는 값 비교가 필요하면 그냥 boilerplate 코드를 쓰자.
record 키워드를 JPA Entity 에 사용하는 것은 적절하지 않다.
코틀린의 Data Class를 자바에서도 지원하는가?
hashCode
,toString
,equals
등을 변경없이 사용하는보일러 플레이트 코드로 만듦
record
키워드를 지원하기 시작constructor
,getter
,equals
,hashCode
,toString
지원The text was updated successfully, but these errors were encountered: