2011-03-07 4 views
2

JPA에 힘든 시간을 보내고 있습니다. 누군가 나를 도울 수 있기를 바랍니다. - 양방향 다 대다 JPA

@JoinTable(name = "CPE_ROLTUS", joinColumns = { 
    @JoinColumn(name = "CPE_ROLTUS_TIPOUSU_ID", referencedColumnName = "GTV_TIPOUSU_ID")}, inverseJoinColumns = { 
    @JoinColumn(name = "CPE_ROLTUS_ROL_ID", referencedColumnName = "CPE_ROL_ID")}) 
@ManyToMany(fetch = FetchType.LAZY, cascade={CascadeType.REFRESH}) 
private List<TipoUsuario> tipoUsuarioList; 
Rol.java

  • 된 Rol (CPE_ROL)
  • TipoUsuario (GTV_TIPOUSU)
  • RolTipoUsuario (가입 표 CPE_ROLTUS) :

    나는 3 개 테이블이

    TipoUsuario.java

    @ManyToMany(mappedBy = "tipoUsuarioList", fetch = FetchType.LAZY, cascade={CascadeType.REFRESH}) 
    
    
    private List<Rol> rolesDefault; 
    

    어떤 이유로 인해 rolesDefault가 채워지지 않습니다. 뭔가 빠졌는지 궁금합니다.

    미리 감사드립니다.

    다니엘

+0

당신은 그것을 열망하는 가져 오기로 설정했거나 쿼리 할 때 가져 오기 명령문에 포함 시키려고 했습니까? – Steven

+0

예, 둘 다 시도했지만 그 중 아무도 작동하지 않는 것 같습니다. – zkropotkine

답변

5

당신이 관계의 양쪽을 설정하지 않는 개체를 만들 때 내 생각이다. JPA에서 양방향 관계를 유지해야합니다. 한쪽에 추가하면 다른쪽에도 추가합니다. 읽을 때

참조, http://en.wikibooks.org/wiki/Java_Persistence/Relationships#Object_corruption.2C_one_side_of_the_relationship_is_not_updated_after_updating_the_other_side

당신은 가장 가능성 캐싱 활성화, 또는 같은 EntityManager를 사용하는, 그래서 당신은 캐시에서 개체를 얻을. 공유 캐시를 비활성화하거나 객체를 새로 고칠 수도 있지만 영구 코드를 수정하는 것이 가장 좋습니다.

그렇지 않은 경우 가장 유용한 로깅을 활성화하고 실행되는 SQL을 확인하십시오.

+0

그래, 나는 같은 EntityManager를 사용하고있다 ... 나는 nativeQuery로 이것을 끝냈다. 나는 최선의 해결책이 아니라는 것을 안다. 그러나 내가 찾은 것이 가장 쉽고 빠르다. – zkropotkine