2010-02-02 11 views
1

가정하자 나는 엔티티를 가지고있다.문제는 <String>

이 목록의 문자열은 많은 AnEntity 개체에서 동일한 값을 가질 수 있습니다. 즉, 많은 AnEntity 객체가 동일한 문자열을 참조 할 수 있습니다.

@ElementCollection에서 제공하는 기본 매핑은 문자열 테이블 (ANENTITY_STRINGS)에 많은 복사본을 남겨 둡니다. 이 방법으로 어떻게 매핑하여 문자열 목록을 저장할 때 중복 문자열의 방대한 테이블이 없도록 값을 고유하게 저장합니까?


필자는 "placeholder"클래스를 사용하려고했는데 그 중 하나의 멤버는 문자열입니다. 불행히도이 방법을 사용하면 관련 테이블의 데이터를 완전히 읽을 수 없게됩니다. BLOB 또는 LOB로 저장 될 것으로 확신합니다.

@ElementCollection 
@ManyToMany 
private List<StringWrapperClass> strings = new Vector<StringWrapperClass>(); 

을 그리고 내 엔티티는 같은 같습니다 : 그래서, 예를 들어 내가 대신 목록을 사용하는,이 같은 짓을

@Entity 
public class StringWrapperClass implements Serializable { 
    private String string; 
    // other stuff, getters, setters, id, etc 
} 

을하지만 말했듯이, 그건 그냥 ANENTITY_STRINGS에 바이트를 저장합니다. 나는 이것이 이것이 "옳은"방법이라고 상상할 수 없습니다.

private Set<String> strings = new HashSet<String>(); 

답변

0

는, 그래서 아마 할

HashSet를 사용합니다. 그런 다음 many-to-many 관계이기 때문에 @ManyToMany을 사용해야합니다.

+0

작동하지 않았지만 지속 된 목록에는 여전히 많은 복제본이 있습니다. 명확하게 말하면, 엔티티 자체는 그것의리스트에 중복 스트링을 가지지 않을 것이고, 그것은 모든 중복을 가진 테이블 자체이다. –

1

그래서, 각 AnEntity 많은 문자열이있는 매핑을 만들려면, 각 문자열은 많은 AnEntities에 속할 수 있습니다 대신 Vector를 사용

+0

나는 그것도 생각했다. 그러나 나는 여전히 ANENTITY_STRING 테이블에 많은 중복으로 끝난다. 이 작업은 SQL을 사용하여 매우 쉽게 수행 할 수 있지만 JPA 2.0을 사용하여 DB 이식성을 높이기 위해이 작업을 수행하려고합니다. –

+0

@J_Y_C : 중복되지 않고 SQL에서 어떻게 수행되는지 알 수 없습니다. 문자열 테이블 (일대 다 관계) 또는 조인 테이블 (다 대 다 관계)에서 중복을 갖습니다. – axtavt