2012-04-16 2 views
0

enteprise 응용 프로그램에서 ORM 도구를 사용하는 것이 처음입니다. 우리는 JPA 2.0 및 EE6을 사용하는 확장 가능한 응용 프로그램을 구축하고 있습니다. 내 응용 프로그램을 빌드하는 좋은 패턴을 찾으려고하지만 내 엔티티를 동기화하는 방법을 찾을 수 없습니다. 엔티티에 액세스하는 빈을 풀링하고 싶습니다.JPA2.0 및 EE6 내 조직을 동기화 유지

예 :

나는 그룹이 있습니다

@Entity 
public class Group implements Serializable 
{ 
    @Id 
    private Long id; 
    @OneToMany 
    private List<MyUser> myUsers; 

    public Group() 
    { 
    } 

    public Long getId() 
    { 
     return id; 
    } 

    public void setId(Long id) 
    { 
     this.id = id; 
    } 

    public void addUser(MyUser u) 
    { 
     myUsers.add(u); 
    } 
} 

을 그리고 내가 추가하거나 사용자를 제거하는 무 상태 빈을했을 경우 이제 사용자

@Entity 
public class MyUser implements Serializable 
{ 
    @Id 
    private Long id; 

    public MyUser() 
    { 
    } 

    public Long getId() 
    { 
     return id; 
    } 

    public void setId(Long id) 
    { 
     this.id = id; 
    } 

} 

이 그룹, 나는 날짜가없는 정보를 갖는 상태 비 저장 빈의 다른 인스턴스를 가질 위험이있다. 이것에 대한 가장 좋은 방법은 무엇입니까?

+0

먼저 솔루션을 구현하고 나중에 어떤 경우에 빈 최신 정보의 부족이 포함되어 있는지 확인하세요. – Phani

답변

5

당신의 디자인 문제가 정확히 무엇인지 확실하지 않습니다. 상태없는 빈은 ... 상태를 유지하면 안됩니다. 필요에 따라 사용자 그룹을 검색하고 업데이트 한 다음 DB에 다시 저장해야합니다. 동시 업데이트에 대한 정말 걱정하고 엄격하게 제어해야 할 경우 다음 엔티티에 잠금 모드를 사용해보십시오 :

  • JPA 1.0 버전 번호 (OPTIMISTIC, OPTIMISTIC_FORCE_INCREMENT)를 통해 낙관적 잠금을 지원합니다.
  • JPA 2.0 비관적 잠금 (INCREMENT, PESSIMISTIC_FORCE_INCREMENT) 같은 엔티티의 시스템에 경쟁의 높은 금액이있는 경우

만이 아니라 확장하지 않는 한, 비관적 잠금을 사용하여 추가합니다.

Additional Reading and Examples

+0

그래서 당신이 말하는 것은 데이터를 메모리에 보관하지 말고 호출 할 때마다 DB에서로드해야한다는 것입니다. – Rob

+0

예,이 경우 확실히. 일반적으로 긴 *** 기간 동안 정적 인 데이터 만 캐시합니다. – Perception

+0

JPA 프레임 워크가 두 번째 레벨 캐시를 사용하여 데이터를 캐시하도록해야합니다. 그렇지 않으면, 당신은 휠을 다시 발명하고 플러스 버기가 될 것입니다. – ewernli

관련 문제