문제

나는 개체의 목록과 각 개체 목록에서 위치를 가질 수 있는 변경되지 않는 한 명시적으로 변화,즉 오브젝트가에 큐가 있습니다.What 컬렉션에서 사용해야합니다 나이터베이스를 저장하는 이러한 물체와 어떻게 해야 하는 컬렉션에 주석을 달 수?

저는 현재 이

@Entity
class Foo {
  ...
  @OneToMany(mappedBy = "foo", cascade = CascadeType.ALL)
  List<Bar> bars = new ArrayList<Bar>();
  ...
}

이것이 가능하지 않은 경우 JPA 순수,나를 사용하여 EclipseLink 내 JPA 공급자는,그래서 EclipseLink 특정한 주석 것인 경우 아무 것도 도움이 됩니다.

편집:참고 사는 문제가 없는 자바지 않을 것 preserv 하기 위해,나는 알고 대부분의 컬렉션을 할 문제는 내가 알지 못하는 스마트 방법에 대한 JPA 을 preserv 합니다.데 주문 id 및 질의를 위하여 그것은 가능하지만 제 경우를 유지하기 위해 id 은 힘든 일(기 때문에 사용자 인터페이스 할 수 있습의 순서 항목)내가 똑똑한 방법으로 그것을 할 수 있습니다.

도움이 되었습니까?

해결책

SQL로 왕복 후 주문하기를 원한다면 엔티티 자체 내에서 일종의 주문 ID를 제공해야합니다. SQL은 목록 지향이 아닌 자연스럽게 설정됩니다. 그런 다음 다시 가져온 후 정렬하거나 쿼리가 주문을 지정하는지 확인할 수 있습니다.

엔티티에 자동으로 생성 된 정수 ID를 제공하는 경우 ~할 것 같다 일하지만, 나는 그것을 보장하고 싶지 않습니다.

다른 팁

Jon이 제안한대로 정렬 주문 ID를 사용한 다음 @OnetMany 아래에 @OrderBy 주석을 추가하십시오. 이것은 지정된 필드에서 쿼리를 주문합니다.

예를 들어, "sortid"라는 새 필드를 바에 추가하면 Foo는 다음과 같습니다.

@Entity
class Foo {
  ...
  @OneToMany(mappedBy = "foo", cascade = CascadeType.ALL)
  @OrderBy("sortId ASC")
  List bars = new ArrayList();
  ...
}

당신은 할 수 있습니다

  1. 창조 전에 목록을 정렬하십시오
  2. 창조 후 목록을 정렬하십시오
  3. 인서트에서 정렬을 수행하는 컬렉션을 사용하십시오. 트리 맵, 트리 셋

링크 된 목록은 Java의 대기열 Inteface를 구현하고 중간에 물건을 추가 할 수 있습니다 ...

TBH 대부분의 컬렉션은 주문하지 않습니다 ...

문서를 점검하십시오. 대부분은 주문되었는지 여부를 말합니다.

그것은 시도 가치가 있 LinkedList 대신 ArrayList 으로,그러나 존는 말했다,당신은 당신을 찾아야의 방법으로 유지하기 위해 정보입니다.

해결책은 아마 포함 발행하는 주문 번호를 각 항목에 있는 그것을 저장하로 SortedMap,으로 변환할 때 목록는 경우에,목록은 당신이 필요로하는 것입니다.

그러나,ORM 될 수 있습을 충분히 영리지 변환을 위해 당신은 당신이 저장한 컬렉션으로 LinkedList.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top