Account 도메인 추가
OAuth2로 인증을 하려면 일단 Account 부터
● id
● email
● password
● roels
@Entity
@Getter @Setter @EqualsAndHashCode(of = "id")
@Builder @NoArgsConstructor @AllArgsConstructor
public class Account {
@Id @GeneratedValue
private Integer id;
@Column(unique = true)
private String email;
private String password;
@ElementCollection(fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
private Set<AccountRole> roles;
}
@ElementCollection:
-RDB에는 컬렉션과 같은 형태의 데이터를 컬럼에 저장할 수 없기 때문에, 별도의 테이블을 생성하여 컬렉션을 관리해야한다.
이때 컬렉션 객체임을 JPA에게 알려주는 어노테이션이 @ElementCollection이다.
JPA는 @Entity가 아닌 Basic Type이나 Embeddable Class로 정의된 컬렉션을 테이블로 생성하며 One-To-Many 관계를 다룬다.
-연관된 부모 Entity 하나에만 연관되어 관리된다. (부모 Entity와 독립적으로 사용 X)
-항상 부모와 함께 저장되고 삭제되므로 cascade 옵션은 제공하지 않는다. (cascade = ALL 인 셈)
-부모 Entity Id와 추가 컬럼(basic or embedded 타입)으로 구성된다.
-기본적으로 식별자 개념이 없으므로 컬렉션 값 변경 시, 전체 삭제 후 새로 추가한다.
public enum AccountRole {
ADMIN, USER
}
@Builder @AllArgsConstructor @NoArgsConstructor
@Getter @Setter @EqualsAndHashCode(of ={ "id" ,"name"})
@Entity
public class Event {
...............
@ManyToOne
@JsonSerialize(using = AccountSerializer.class)
private Account manager;
...............
}
@JsonSerialize
JSON 수발신할때 값 설정 옵션 제공
@JsonSerialize(using = AccountSerializer.class)
Account를 json serialization 할 때 AccountSerializer 클래스를 사용하라는 뜻
@JsonSerialize(include=JsonSerialize.Inclusion.NON_DEFAULT)
int 0 : 안보냄
"" : 안보냄
null : 안보냄
@JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL)
@JsonInclude(JsonInclude.Include.NON_NULL)
int 0 : 보냄
"" : 보냄
null : 안보냄
@JsonSerialize(include=JsonSerialize.Inclusion.ALWAYS)
int 0 : 보냄
"" : 보냄
null : 보냄
@JsonSerialize(include=JsonSerialize.Inclusion.NON_EMPTY)
int 0 : 보냄
"" : 안보냄
null : 안보냄
public class AccountSerializer extends JsonSerializer<Account> {
@Override
public void serialize(Account account, JsonGenerator gen, SerializerProvider serializers) throws IOException {
gen.writeStartObject();
gen.writeNumberField("id", account.getId());
gen.writeEndObject();
}
}