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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions