어떻게 보증하기 위해에 있는 항목의 컬렉션
-
03-07-2019 - |
문제
나는 개체의 목록과 각 개체 목록에서 위치를 가질 수 있는 변경되지 않는 한 명시적으로 변화,즉 오브젝트가에 큐가 있습니다.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();
...
}
당신은 할 수 있습니다
- 창조 전에 목록을 정렬하십시오
- 창조 후 목록을 정렬하십시오
- 인서트에서 정렬을 수행하는 컬렉션을 사용하십시오. 트리 맵, 트리 셋
링크 된 목록은 Java의 대기열 Inteface를 구현하고 중간에 물건을 추가 할 수 있습니다 ...
TBH 대부분의 컬렉션은 주문하지 않습니다 ...
문서를 점검하십시오. 대부분은 주문되었는지 여부를 말합니다.
그것은 시도 가치가 있 LinkedList 대신 ArrayList 으로,그러나 존는 말했다,당신은 당신을 찾아야의 방법으로 유지하기 위해 정보입니다.
해결책은 아마 포함 발행하는 주문 번호를 각 항목에 있는 그것을 저장하로 SortedMap,으로 변환할 때 목록는 경우에,목록은 당신이 필요로하는 것입니다.
그러나,ORM 될 수 있습을 충분히 영리지 변환을 위해 당신은 당신이 저장한 컬렉션으로 LinkedList.