package stduy.datajpa.entity;
import lombok.*;
import javax.persistence.*;
@Entity
@Getter
@Setter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@ToString(of = {"id", "username", "age"})
@NamedQuery(
name="Member.findByUsername",
query="select m from Member m where m.username = :username"
)
@NamedEntityGraph(name="Member.all", attributeNodes = @NamedAttributeNode("team"))
public class Member extends JpaBaseEntity{
@Id
@GeneratedValue
@Column(name = "member_id")
private Long id;
private String username;
private int age;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "team_id")
private Team team;
public Member(String name) {
this.username = name;
}
public Member(String name, int age, Team team) {
this.username = name;
this.age = age;
if (team != null) {
changeTeam(team);
}
}
public Member(String name, int age) {
this.username = name;
this.age = age;
}
public void changeTeam(Team team) {
this.team = team;
team.getMembers().add(this);
}
}
@MappedSuperclass
public class JpaBaseEntity {
@Column(updatable = false)
private LocalDateTime createdDate;
private LocalDateTime updatedDate;
@PrePersist
public void prePersist() {
LocalDateTime now = LocalDateTime.now();
createdDate = now;
updatedDate = now;
}
@PreUpdate
public void preUpdate() {
updatedDate = LocalDateTime.now();
}
}
가져다 쓸 Column이 작성된 class에는 @MappedSuperclass를 붙여주고
가져다 쓸곳인 엔티티에는 해당 class를 상속받아면된다.
public class Member extends JpaBaseEntity{