๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ฅ ํ”„๋กœ์ ํŠธ/์›จ๋”ฉ๋ฉ”์ดํŠธ

[์˜ค๋ฅ˜] ์ƒ์† ๊ด€๊ณ„์˜ Entity์— @Builder ์ ์šฉ ์‹œ ์ด์Šˆ

by nitronium102 2023. 7. 26.

๋ฌธ์ œ ์ƒํ™ฉ

Planner๊ฐ€ User๋ฅผ ์ƒ์†๋ฐ›๊ณ  ์žˆ๊ณ , ๋‘˜ ๋‹ค์—๊ฒŒ @Builder๋ฅผ ์„ ์–ธํ•œ ์ƒํ™ฉ

@SuppressWarnings("checkstyle:RegexpMultiline")
@NoArgsConstructor
@Getter
@Entity
public class Users extends BaseTimeEntity {
    ... 
	@Builder
	public Users(String email, String nickname, String imageUrl, AuthProvider authProvider, String authProviderId) {
		this.email = email;
		this.nickname = nickname;
		this.imageUrl = imageUrl;
		this.authProvider = authProvider;
		this.authProviderId = authProviderId;
		this.state = UserEnum.NORMAL;
		this.role = "USER";
		this.blockCnt = 0;
		this.reportCnt = 0;
	}
}

 

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")
public class Planner extends Users {
	...
	@Builder
	public Planner(String company, String position, String region) {
		this.company = company;
		this.position = position;
		this.region = region;
	}
}

 

์ด๋ ‡๊ฒŒ ์„ ์–ธํ–ˆ๋”๋‹ˆ ๋‘˜์˜ ๋ฐ˜ํ™˜ ํƒ€์ž…์ด ๋‹ค๋ฅด๋‹ค๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค

builder() in .users.entity.Planner cannot hide builder() in.entity.Users
return typeentity.Planner.PlannerBuilder is not compatible with entity.Users.UsersBuilder

 

๋ฐœ์ƒ ์ด์œ 

@Builder ๋กœ ์ดˆ๊ธฐํ™”ํ•  ๋•Œ, ์ž์‹ ํด๋ž˜์Šค์—์„œ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜๋ฅผ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ•ด ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜ ์—†์–ด์„œ ๋ฐœ์ƒํ•œ๋‹ค

 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

@SuperBuilder๋ฅผ ์ด์šฉํ•ด ๋ถ€๋ชจ ๊ฐ์ฒด๋ฅผ ์ƒ์†๋ฐ›๋Š” ์ž์‹ ๊ฐ์ฒด์—์„œ๋„ ๋ถ€๋ชจ ๊ฐ์ฒด์˜ ํ•„๋“œ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฐ”๊ฟ”์ค€๋‹ค

๊ฐ ์—”ํ‹ฐํ‹ฐ ์œ„์— ํ•ด๋‹น annotation์„ ์ถ”๊ฐ€ํ•ด์ฃผ๋ฉด ๋œ๋‹ค

@SuperBuilder
@NoArgsConstructor
@Getter
@Entity
public class Users extends BaseTimeEntity {
@SuperBuilder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Getter
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")
public class Planner extends Users {

 

๋Œ“๊ธ€