Skip to content

14장 컬렉션과 부가 기능 #13

@LOG-INFO

Description

@LOG-INFO

끄적끄적

Collection

  • Hibernate는 Collection을 효율적으로 관리하기 위해 Entity를 영속 상태로 만들 때 원본 Collection(Java)을 감싸고 있는 내장 Collection(Hibernate)을 생성해서 사용하도록 참조를 변경함
    • 어떤 점에서 효율적일까? 성능을 말한 것 같진 않고, 추상화 시킴으로써 관리가 용이해짐을 말하는건가?

    • 내장 Collection은 원본 Collection을 감싸고 있어서 Wrapper Collection이라고도 불린다
    • Collection, List -> PersistentBag (중복 O, 순서 X)
      • 중복 Entity 있는지 비교하지 않고 단순히 저장만 함
        • Entity를 추가해도 지연 로딩된 Collection을 초기화하지 않음?

    • List + @OrderColumn -> PersistentList (중복 O, 순서 O)
      • DB에 저장할 때 순서 값을 저장해서 조회할 때 사용함
        • 오 처음�앎.

        • 근데 역시 실무에서 잘 사용하지 않는군. ArrayList에서 중간에 끼워넣거나 삭제할 때의 성능상 단점과 같은 이유군.

    • Set -> PersistentSet (중복 X, 순서 X)
      • 중복 Entity 있는지 비교해야 함
        • Entity를 추가할 때 지연 로딩된 Collection을 초기화 함?

    • 하이버네이트는 이런 특징 때문에 컬렉션을 사용할 때 즉시 초기화해서 사용하는 것을 권장한다??

      • `Collection members = new ArrayList();

Converter: Entity의 데이터를 변환해서 DB에 저장 가능

  • y,n 대신 0,1로 저장하거나...
  • date, datetime 대신 long으로 저장하거나...
  • 근데 이런건 안티패턴이지 않나.. 굳이..? 코드 난독화를 위한건가?

Listener

  • Use case
    • 모든 Entity를 대상으로 어떤 사용자가 삭제를 요청했는지 모두 로그로 남겨야 하는 요구사항
    • etc...
  • 이벤트 종류
    • PrePersist
    • PostPersist
    • PostLoad - 2차 캐시에 저장되어 있어도 호출된다
    • PreUpdate
    • PostUpdate
    • PreRemove
    • PostRemove
  • 이벤트 적용 위치
    • Entity에 직접 적용
    • 별도의 Listener 등록
    • 기본 Listner 사용
  • 이벤트 호출 순서
    • 기본 Listener
    • Parent Class Listener
    • Listener
    • Entity

Entity Graph: 연관 Entity들을 함께 조회할 때 사용

  • 이거 전에 사용하려 해봤는데 Entity Graph 쫌만 복잡해져도 사용하기 어려워졌던 것 같음
  • 실무에서 안 쓸 것 같은데 쓰는 곳 있나??

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions