2017-11-21 5 views
1

나는 내 애플 리케이션에서 엔티티 간의 관계를 디자인하는 방법에 대해 궁금해했다. 도울 수 있니?데이터베이스 관계 디자인 JPA

무엇 APP? - CONTEXT

전 스택 개발에 대한 가난한 기술을 훈련시키는 취미 프로젝트로 사람들이 비용을 추적하고 통계를 계산하는 것을 돕는 앱을 개발하려고합니다. 아이디어는 사용자가 로그인하여 경비를 추가 할 수 있습니다 (예 : 닭고기를 3 $에 구입 한 경우) 앱에서 반복 입력을 기반으로 비용 통계를 계산합니다.

내가 알아야 할 것은 무엇입니까?

사용자 등록 및 로그인을 완료했으며 "SingleExpense"엔티티 클래스를 작성하고 있습니다. 이 특정 사용 사례에서 비용과 사용자 간의 관계가 어떻게 나타나야하는지 궁금합니다.

  • 사용자가 @OneToMany 주석이있는 필드로 비용 집합을 사용해야합니까? 하지만 그때마다 사용자를 가져올 때마다 나는 그의 경비를 영원히 바랄 것입니다. 맞습니까? 나는 FetchType을 게으르거나 할 수도 있지만 가장 깨끗하고 정확한 해결책을 찾고 있습니다.
  • 비용은 @ManyToOne 주석이있는 필드로 사용자를 가져야합니까? 하지만 모든 비용을 가져 오려고하면 User 객체가 오른쪽으로 가져 오게됩니까? 그리고 새로운 비용을 유지하기를 원한다면 전체 User 객체를 비용에 넣어야합니다.
  • 아니면 어떤 이유로 든 양방향이어야합니까?

나는 매우 혼란 스럽다. 너희들이 나에게 무슨 일을하고 무엇이 왜, 왜, 왜 나에게 설명 할 수 있길 바란다. 고마워요! 건배!

답변

0

당신이 설명한 이유 때문에 아마 주어진 사용자의 모든 비용을로드하는 것이 결코 좋은 생각이 아니므로 아마 OneToMany가 없어야합니다. 그리고 어떤 유스 케이스가 그렇게 할 필요가 있다고하더라도, 간단한 JPQL 쿼리가 그렇게 할 수 있습니다.

이렇게 두 번째 옵션은 올바른 것입니다. ManyToOne도 게으를 수 있습니다. 그러므로 비용을 가져 오면 expense.getUser()에 의해 반환 된 값을 사용하기 전에는 사용자를 가져 오지 않습니다. 그리고 새로운 비용의 저장에 관한 :

  • 데이터베이스에서 사용자를로드하는 새로운 비용에 저장하기, EntityManager.find() 사용하는 것은 큰 문제가되지 않을 것 : ID로 엔티티를로드하는 것은 매우 빠르고
  • 그러나 당신이 존재하는 가정하면 그렇다하더라도, 당신은 실제로 데이터베이스에서 사용자를로드 할 필요가 없습니다 : 당신은 당신이 EntityManager.getReference()
+0

감사에 감사를 얻을 수있는 사용자에 게으른 참조를 얻을 필요 ! 그게 내가 한 짓이야! – furry12