-
[돌다리 두들기기] Builder 패턴개발/JPA 2024. 4. 24. 14:43
JPA 엔티티에서 롬복의 @Builder 패턴을 사용할 경우 @AllAgrsConstructor와 @NoArgsContructor를 붙여야 한다. JPA 스펙에서 엔티티 클래스는 기본 생성자를 가져야 하며, @Builder에서 코드를 만들 때 필드를 받아서 객체를 생성하는 생성자를 필요로 한다. @Builder 패턴에서 생성되는 코드는 다음과 같다. 롬복의 코드와 똑같진 않지만 기본 흐름은 다르지 않다.
public class Person { private String name; private int age; public static class PersonBuilder { private String name; private int age; private PersonBuilder() {} public PersonBuilder name(String name) { this.name = name; return this; } public PersonBuilder age(int age) { this.age = age; return this; } public Person build() { Person person = new Person(); person.name = this.name; person.age = this.age; return person; } } // Static method to create a builder public static PersonBuilder builder() { return new PersonBuilder(); } public Person(String name, long age) { this.name = name; this.age = age; } // Private constructor used by builder private Person() {}
JPA 엔티티 스펙에 맞추기 위해 protected 이상의 Person 기본 생성자가 필요하기 때문에 @NoArgsContructor를 붙인다. 롬복의 빌더 패턴이 적용된 클래스는 빌더 패턴만 사용할 것을 강제하지 않고 생성자에 파라미터를 주입하는 방식으로도 인스턴스를 생성할 수 있게 되어 있다. 그렇기 때문에 @AllAgrsConstructor가 필요하다.
Person taetae = Person.builder() .name("taetae") .age(30) .build(); Person tae = new Person("tae", 20);
'개발 > JPA' 카테고리의 다른 글
[JPA][Archiving] in_clause_parameter_padding 옵션 (0) 2024.03.03 Update (0) 2024.03.03 스프링부트 3.1.2 Querydsl 설정 (0) 2023.08.02 페치 조인의 한계과 극복(요약 ver.) (0) 2023.07.25 MVCC=TRUE (0) 2023.07.18