Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

엔티티 작성시 주의사항 #35

Open
Gunju-Ko opened this issue Oct 16, 2021 · 0 comments
Open

엔티티 작성시 주의사항 #35

Gunju-Ko opened this issue Oct 16, 2021 · 0 comments
Assignees
Labels

Comments

@Gunju-Ko
Copy link
Owner

엔티티 작성시 주의사항

equals(), hashcode() 재정의

  • 엔티티는 식별자(@id)를 가지를 객체로써 equals(), hashcode()를 재정의해줘야 동일성과 동등성이 보장될 수 있다.
  • 재정의시 @Id 필드는 필수로 넣어주면 좋다.

toString() 재정의

  • 연관관계 필드들은 제외하고 정의해야 한다.
  • 양방향 관계라면 특히 조심해야 한다.

kotlin 기준 엔티티 작성 주의사항

all open 플러그인 잘쓰기

// allopen 확장, @Component 등 특정 스프링 어노테이션에 대해 allopen 플러그인을 적용.
kotlin("plugin.spring") version kotlinVersion
// noarg 확장, @Entity, @Embeddable, @MappedSuperclass 어노테이션에 대해 noarg 플러그인 적용.
kotlin("plugin.jpa") version kotlinVersion
  • 코틀린을 사용하여 JPA, 스프링을 개발할 때 기본적으로 위와 같은 두 플러그인을 설정하게 된다.
  • JPA의 지연 로딩을 제대로 사용하려면 all open 플러그인의 커스텀이 필요하다.
    • 지연 로딩은 프록시 객체를 만들 수 있어야 하는데, 그러려면 엔티티 클래스에 open 키워드를 클래스와 필드에 추가해줘야한다.
allOpen {
    annotation("javax.persistence.Entity")
    annotation("javax.persistence.MappedSuperclass")
    annotation("javax.persistence.Embeddable")
}
  • 위 설정을 추가하여 지연 로딩이 가능하게 즉, 프록시 객체 생성이 가능하게 설정할 수 있다.

출처

@Gunju-Ko Gunju-Ko added the JPA label Oct 16, 2021
@Gunju-Ko Gunju-Ko self-assigned this Oct 16, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant