{"id":50414345,"url":"https://github.com/gmoon92/hibernate-envers","last_synced_at":"2026-05-31T05:03:08.175Z","repository":{"id":44517963,"uuid":"220184714","full_name":"gmoon92/hibernate-envers","owner":"gmoon92","description":"Hibernate Envers: 데이터 이력 관리","archived":false,"fork":false,"pushed_at":"2023-07-07T21:47:16.000Z","size":155,"stargazers_count":3,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-04-26T18:00:41.958Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://gmoon92.github.io","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gmoon92.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-11-07T08:14:15.000Z","updated_at":"2024-04-26T18:00:41.959Z","dependencies_parsed_at":"2022-08-31T06:11:28.700Z","dependency_job_id":null,"html_url":"https://github.com/gmoon92/hibernate-envers","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gmoon92/hibernate-envers","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmoon92%2Fhibernate-envers","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmoon92%2Fhibernate-envers/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmoon92%2Fhibernate-envers/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmoon92%2Fhibernate-envers/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gmoon92","download_url":"https://codeload.github.com/gmoon92/hibernate-envers/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gmoon92%2Fhibernate-envers/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33719601,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-31T05:03:08.078Z","updated_at":"2026-05-31T05:03:08.170Z","avatar_url":"https://github.com/gmoon92.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# hibernate-envers-rev-listener\nHibernate의 Envers는 어디까지 제어할 수 있을까?\n\n# 개발 환경\n- Java8\n- Spring Boot 2.2.1.RELEAS\n- Hibernate 5.4.4.Final\n- Hibernate Envers 5.4.4.Final\n- QueryDsl 4.2.1\n- JUnit5(AssertJ), Maven\n- H2 1.4.200\n\n# 구현 기능\n - Revision Custom Entity\n - EntityTrackingRevisionListener\n - EventListenerRegistry\n - Spring Data JPA Repository Custom\n - h2 dev, test 환경 분리\n\n# 들어가기전\n# Hibernate Envers Concepts\n\n_사용자들이 변경한 데이터들에 대해 조회할 수 있는 화면을 제공해주세요._\n\n1. 화면의 타이틀은 \"변경 이력 사항 조회\"로 개발한다.\n2. 기존 엔티티가 변경되면 추적할 수 있는 이력 테이블을 구성한다.\n3. 이력 테이블에서 관리하는 데이터들을 사용자에게 제공한다.\n4. 단, 해당 이력 데이터는 사용자가 정의한 데이터들만 관리한다.\n5. 추가로 이전의 데이터와 최신 데이터를 비교하여 변경된 사항들을 조회할 수 있도록 한다.\n\n# 프로젝트 설명\n\n준비중...\n\n---\n\n# [번외] 구현에 하면서 발생했던 이슈들\n- h2의 버전 문제로 인한 mem 옵션의 제약사항\n- Spring Boot 2.0 부터 변경된 findOne 메서드, 그 이유와 사용법\n- N+1 발생의 원인과 해결 방법들\n  - 글로벌 패치 전략이 답이 아니다.\n  - JPQL의 패러다임\n- RevisionListener가 아닌 EntityTrackingRevisionListener를 사용한 이유\n  - newRevision과 entityChanged 메서드의 차이\n- EventListenerRegistry 이벤트 등록\n  - POST_COMMIT_INSERT 과 POST_INSERT의 차이\n  - ID 생성 전략과 Rollback 문제\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgmoon92%2Fhibernate-envers","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgmoon92%2Fhibernate-envers","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgmoon92%2Fhibernate-envers/lists"}