HashSet에 넣어둔 객체의 해시 코드가 바뀌면 contains와 remove가 고장난다. 따라서 해시 코드가 바뀌지 않도록 영속화 후 연관 관계를 맺거나, 특별한 이유가 없다면 동일성 메소드를 재정의하지 말자.
flush() 호출 전 변경 사항은 최적화된다. 연관 관계를 맺는 과정도 쿼리 최적화로 인해 무시될 수 있으므로 주의해야 한다. 연관 관계를 맺은 이후에는 가급적 영속성 컨텍스트를 초기화하거나 flush() 호출을 고려해보자.
연관 관계를 여러 개 갖는 Entity의 경우, 두 개 이상의 관계 필드에 `CascadeType.PERSIST`를 적용하지 말자. 그리고 `CascadeType.ALL`을 설정하기 전에 꼭 필요한 기능인지 충분히 고민해보자.
orphanRemoval이 적용된 연관 관계에는 CascadeType.PERSIST를 포함시켜야 한다. 이는 Hibernate(5.4.27.Final 기준)의 버그이다.
Java에서 원시 타입을 Generic 타입으로 전달할 때 Autoboxing이 일어난다. 서로 다른 클래스 인스턴스 간의 equals() 비교는 false를 반환하므로 주의해야 한다.