@Getter
@Entity
@Table(name = "users")
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor(access = PROTECTED)
@EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = true)
public class User extends SoftDeleteBaseEntity {
@Id
@EqualsAndHashCode.Include
@Column(name = "user_id")
private UUID uuid;
@Column(name = "email")
private String email;
@Column(name = "password")
private String password;
@Enumerated(EnumType.STRING)
@Column(name = "role")
private Role role;
}@Getter
@MappedSuperclass
@SuperBuilder
@AllArgsConstructor(access = PRIVATE)
@NoArgsConstructor(access = PROTECTED)
public class SoftDeleteBaseEntity extends BaseEntity{
@LastModifiedDate
@Column(name = "deleted_at")
private LocalDateTime deletedAt;
@Column(name = "is_deleted")
private Boolean isDeleted = false;
}public static User toEntity(UserDto dto) {
return User.builder()
.uuid(UUID.randomUUID())
.email(dto.getEmail())
.password(dto.getPassword())
.role(Role.USER)
.build();
} @Getter
@MappedSuperclass
@SuperBuilder
@AllArgsConstructor(access = PRIVATE)
@NoArgsConstructor(access = PROTECTED)
public class SoftDeleteBaseEntity extends BaseEntity{
@LastModifiedDate
@Column(name = "deleted_at")
private LocalDateTime deletedAt;
@Builder.Default
@Column(name = "is_deleted")
private Boolean isDeleted = false;
} public class SoftDeleteBaseEntity {
private Boolean isDeleted = false;
public SoftDeleteBaseEntity() {
// 기본 생성자는 isDeleted 필드를 false로 초기화
}
public Boolean getIsDeleted() {
return isDeleted;
}
public static void main(String[] args) {
SoftDeleteBaseEntity entity = new SoftDeleteBaseEntity();
System.out.println(entity.getIsDeleted()); // 출력: false
}
}
import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
public class SoftDeleteBaseEntity {
private Boolean isDeleted = false;
// 빌더 패턴을 사용할 때는 기본값을 명시적으로 지정해야 함
public static void main(String[] args) {
SoftDeleteBaseEntity entity = SoftDeleteBaseEntity.builder().build();
System.out.println(entity.getIsDeleted()); // 출력: null
}
}import lombok.Builder;
import lombok.Getter;
@Getter
@Builder
public class SoftDeleteBaseEntity {
@Builder.Default
private Boolean isDeleted = false;
public static void main(String[] args) {
SoftDeleteBaseEntity entity = SoftDeleteBaseEntity.builder().build();
System.out.println(entity.getIsDeleted()); // 출력: false
}
}
public class User {
private final String name;
private final int age;
private final boolean isDeleted;
private User(Builder builder) {
this.name = builder.name;
this.age = builder.age;
this.isDeleted = builder.isDeleted;
}
public static class Builder {
private String name;
private int age;
private boolean isDeleted;
public Builder name(String name) {
this.name = name;
return this;
}
public Builder age(int age) {
this.age = age;
return this;
}
public Builder isDeleted(boolean isDeleted) {
this.isDeleted = isDeleted;
return this;
}
public User build() {
return new User(this);
}
}
@Override
public String toString() {
return "User{name='" + name + "', age=" + age + ", isDeleted=" + isDeleted + '}';
}
public static void main(String[] args) {
User user = new User.Builder()
.name("John")
.age(30)
.isDeleted(false)
.build();
System.out.println(user); // 출력: User{name='John', age=30, isDeleted=false}
}
}