2012-05-03 4 views
1

Open JPA 엔티티가 있고 다 - 대 - 다 관계를 성공적으로 연결합니다. 지금 당장은 전체 테이블을 성공적으로 가져 왔지만 실제로는 그 테이블의 ID 만 필요합니다. 필자는 나중에 데이터베이스를 호출하여 필요한 항목을 재구성 할 계획입니다 (프로그램의 흐름에 따라). ID (또는 해당 테이블에서 하나의 열) 만 필요합니다.
1) 엔티티 bean 또는 엔티티 bean을 호출하는 데 사용할 상태 비 저장 세션 Bean에서이 제한을 시도해야합니까? 2) JPA를 사용하여이 작업을 시도 할 경우 어떻게 지정할 수 있습니까? 전체 테이블 대신에 테이블에서 ID를 되 찾으십니까? 지금까지 온라인에서 볼 때, 당신이 할 수있는 방법이 보이지 않습니다. 그래서 나는 이것을 할 방법이 없다고 추측합니다. 3) 반환 값을 조작하는 것만으로 필요한 아이디 목록 만 사용자에게 반환하는 사용자에게 반환 할 별도의 클래스를 만들어야합니까?은 JPA를 사용하여 단 하나의 열만 반환 할 수 있습니다.

여기서 완전히 틀릴 수도 있지만, JPA를 사용하여이 작업을 수행하는 간단한 방법이 없다고 생각합니다. 엔티티 bean 대신 사용자 정의 객체를 사용자에게 반환해야합니다. (이 사용자 정의 객체는 현재와 같이 전체 테이블과 반대되는 ID 만 보유합니다.)

모든 생각 ... 나는 이것이 적절하다고 생각하지 않지만 사람들은 항상 코드를 요구하므로 여기에서 go ...

@ManyToMany(fetch=FetchType.EAGER) 
@JoinTable(name="QUICK_LAUNCH_DISTLIST", 
     [email protected](name="QUICK_LAUNCH_ID"), 
     [email protected](name="LIST_ID")) 
private List<DistributionList> distributionlistList; 

현재 전체 레코드 컬렉션을 가져 오는 방법. ID를 원한다는 것을 기억하십시오 ...

try 
    { 
     //int daSize = 0; 
     //System.out.println("Testing 1.2..3...! "); 
     qlList = emf.createNamedQuery("getQuickLaunch").getResultList();    
    } 

이것은 Entity beans를 호출하는 방법입니다. 이 프로그램 적으로 엔티티 bean과 비슷한 사용자 지정 개체를 만들 필요가있는 곳이라고 생각합니다. (다만 ID가 있고 전체 테이블이 아니라 어딘가에 ID를 넣으려고합니다.)

당신의 생각은 무엇입니까

덕분에 당신이 당신의 빠른 실행 클래스에서이 같은 것을 원하는처럼

+0

이제 전체 목록을 얻었습니다. distributionlist에는 원하는 모든 관련 DistributionList 개체가 포함되어 있습니다. distributionList에있는 각 DistributionList를 반복하고, .getId()를 호출하여이를 새 목록에 저장하는 것이 잘못된 이유는 무엇입니까? JPA는 임의의 열이 아닌 전체 객체가 데이터베이스에 저장된다는 추상화 때문에 테이블 전체를 반환합니다. 일반적으로 추상화를 깨는 것은 올바른 대답이 아닙니다. –

+0

글쎄, 내가해야 할 것입니다.그러나 나는 또한 새로운 객체를 생성하고 quickLaunch 객체 대신 사용자를 반환해야 할 것입니다. 어느 것이 가능합니다. 나는이 특별한 경우에 대해, 그 기능을 갖는 것이 좋을 것이라고 생각한다. – SoftwareSavant

답변

1

나는이 문제에 대한 최선의 해결책을 찾았다 고 생각합니다. my other stack overflow answer post

하지만 본질적으로 @ElementCollection 속성을 사용하는 링크를 클릭 너무 게으른 사람들의 이익을 위해 이 ...

@ElementCollection(fetch=FetchType.EAGER) 
     @CollectionTable(name="QUICK_LAUNCH_DISTLIST",[email protected](name="QUICK_LAUNCH_ID")) 
     @Column(name="LIST_ID") 
private List<Long> distListIDs; 

을했다 :
이 링크는 해답이 될 것입니다.

1

소리 :

@Transient 
public List<Integer> getDistributionListIds() { 
    List<Integer> distributionListIds = new LinkedList<Integer>(); 
    List<DistributionList> distributionlistList = getDistributionlistList(); 
    if (distributionlistList != null) { 
     for (DistributionList distributionList : distributionlistList) 
      distributionListIds.add(distributionList.getId()); 
    } 
    return distributionListIds; 
} 

내가 당신의 게터/세터와 유형의 이름에서 조금 추측했다을 DistributionList의 ID 중. 기본적으로 JPA는 이미 모든 관계를 처리하고 있으므로 관련 객체에서 원하는 값을 가져옵니다.

+0

그게 내가 생각하고 있었던거야. 내 많은 것을 많은 관계로 바꿀 필요가 있을까요? 나는 그걸 없애고 그 이드를 얻는다. 어떻게 getDistributionLIsts를 호출하고 있는가? 내 ManyToMany를 유지해야 할 것 같아. – SoftwareSavant

+0

잠재적으로 OneToMany로 정의를 변경할 수 있지만 ToMany 부분이 필요합니다. 결국, 논리적으로 모든 특정 QuickLaunch와 관련된 잠재적 인 많은 DistributionLists를 얻으려고합니다. OneToMany입니다. 그러나 DistributionList가 둘 이상의 QuickLaunch에 속할 수 있다면 ManyToMany로 돌아온 것입니다. 나의 직감은 당신의 관계가 올바르게 설정되었고, 당신은 아직 그것들을 조작하는데 익숙하지 않다는 것입니다. getDistributionLists는'private List distributionlistList'에 대한 getter입니다. getDistributionListIds가 작동하면 왜 다른 것을 변경합니까? –

+0

JPA 객체에 엔티티 관리자를 설정해야합니까? 실제로 필요한 데이터를 어떻게 얻을 수 있습니까? 나는 일시적인 형식의 btw를 테스트했는데 반환 결과에는 표시되지 않습니까? – SoftwareSavant

관련 문제