다음 문제가 있습니다. "역할"과 다 대다 관계가있는 "사용자"엔티티가 있습니다. 문제는 "역할"이 열거되고 (항상 5 개가 있으므로) 사용자를 가져올 때마다 가져 오는 것이므로 (거의 변경되지 않는 것처럼) 불필요한 것으로 여겨 질 때마다 가져 오는 것입니다. 나는 어떻게 든 기억을 유지하고 내가 그녀를 데리고 올 때마다 그 역할을 사용자에게 붙이고 싶습니다. hibernate는 2 레벨 캐시를 사용할 수 있으므로 필요한 경우이 기능을 사용할 수 있습니다. 누구에게도 해결책이 있습니까? 당신이 당신의 데이터 모델을 변경 테이블 역할을 삭제하고 사용자에게 외래 키와 간단한 대일 테이블로 다 대다 테이블을 변환 할 수 있습니다 경우 사전최대 절전 모드 및 캐시가있는 열거 형 값
답변
에서
감사합니다 열 (varchar 또는 숫자로 역할을 들고 있지만 유지하기가 쉽기 때문에 varchar를 사용하는 것이 좋습니다). 당신이 역할 테이블을 삭제하지 않는 경우는 EnumType.ORDINAL
매핑을 사용하여 한 역할 아이디의 0 ~ 4이기 때문에이 작업을 수행하는 것이 가능하다는 것을
@Entity
public class UserRole {
@ManyToOne
private User user;
@Column
@Enumerated(EnumType.STRING) // depends if column is varchar or number
private Role role;
}
public enum Role { ROLE1, ROLE2, ROLE3, ROLE4, ROLE5 }
주의 사항 : 그럼 당신은 다음과 같은이 테이블을 매핑 할 수 있습니다 (기본값). 1에서 5이면 Role
열거 형 시작 부분에 모호한 역할을 추가하십시오.
하지만 그것은 효과적으로 OneToMany 관계를 만들 것입니다. 그래서 항목은 ("User1", "Role1") ("User1", "Role2") ("User2", "Role1")처럼 보일 것입니다. – ShinySpiderdude
물론이 요구 사항이 있으므로 단일 사용자에게 여러 역할을 할당하면 일대 다 관계를 피할 수 없습니다. 매번 캐싱하지 않도록 캐싱을 구성해야하지만이 솔루션을 사용하면 요청한 것처럼 보이는 역할을 모두 가져올 필요가 없습니다. –
대답은 질문에 맞습니까? 아닙니다. 2 차 레벨 캐시를 사용하십시오. (5 행의 테이블에서 ID로 역할을 얻는 것이 이미 매우 빠르다는 점을 감안할 때 이것이 중요한 차이를 만들지는 모르겠다.) –
또한 역할과 사용자 간의 연결을 캐시 할 수 있습니다. – benzonico