2012-01-15 4 views
10

나는 운이 좋은 Map<String, Set<Entity>>과 같은 맵을 유지하기 위해 Hibernate를 사용할 수 있다는 것에 많은 관심을 보였다. (특히 모든 것이 하나의 테이블에 있기를 바란다.)값을 설정 한 상태에서지도를 유지하는 더 좋은 방법이 있습니까?

Mapping MultiMaps with Hibernate 가장 많이 언급되는 것으로 보이는 항목으로 UserCollectionType을 사용하여 구현하는 방법에 대해 자세히 설명합니다.

4 년 전에 작성된 이후 궁금한 점이 있었는데 지금은 더 좋은 방법이 있습니까?

예를 들어, EntityAMap<String, Set/List<EntityB>>과 같은지도를 갖고 싶습니다.

EntityAEntityB의 테이블이있을 것입니다 (에 외래 키가있는 EntityB).

중간 테이블을 원하지 않습니다.

+1

아직 IMO 가야 – Firo

+0

나는 downvoting 또는 closing의 가치가 있는지 모르겠다. "가장 좋은"방법이 있었지만 4 살이었습니다.더 나은 방법이 있는지 물어 보는 것이 부당하다고 생각하지 않습니다. 아마도 나는 덜 장황하거나 단순해질수록 더 나은 자격을 가져야 하겠지만, 여전히 논쟁 적이거나 의견이 아닙니다. 대답이 있거나 그렇지 않습니다. – AHungerArtist

+0

+1은 downvote를 보상합니다. IMO는 법적 질문입니다. – Firo

답변

-1

달라질 때 상황이 복잡해지면 응용 프로그램이 무엇을하는지 이해해야합니다.

어떤 경우에는 Set를 TreeSet으로 표현하고이 TreeSet을 [ "1", "8", "12"]와 같은 순서화 된 코딩 된 문자열로 나타낼 수 있습니다. 여기서 1, 8, 12는 기본 문자입니다. 키를 누른 다음 코드을 작성합시다!

분명히, 제 의견으로는 일반적인 질문이 아닙니다.

public static String toXML(Object instance) { 
    XStream xs = new XStream(); 
    StringWriter writer = new StringWriter(); 
    xs.marshal(instance, new CompactWriter(writer)); 
    return writer.toString(); 
} 

을 한 후 지속을 위해 최대 절전 모드에서 LOB 타입을 사용 :

@Lob 
@Column(nullable = false) 
private String data; 

I를

1

의 내 현재 프로젝트에서 수행하는 방법을 방법은 우리가 XStream을를 사용하여 XML에 콩/컬렉션을 변환하는 것입니다 이 접근 방식이 매우 일반적이라는 것을 알았고 유연한 키/값 저장을 효과적으로 구현할 수있었습니다. XML 형식이 마음에 들지 않으므로 Xstream 프레임 워크에는 개체를 JSON으로 변환하기위한 드라이버가 내장되어 있습니다. 시도해라. 정말로 멋지다.

건배

EDIT : 의견에 대한 응답. 예, 고전적인 접근법의 한계를 극복하려면 색인 생성 및/또는 검색과 같은 것을 희생해야합니다. 당신은 당신 자신이 콜렉션/generic 엔티티 bean을 통해 인덱싱/검색/foreign/child 관계를 구현할 수 있습니다 - 검색이 필요하다고 생각되는 속성/속성 값을 가진 별도의 키/값 테이블을 유지하십시오.

유연하고 동적 인 (즉, 중단 시간이없는 도메인 객체의 새로운 속성 생성) 스키마가 필요한 제품을위한 데이터베이스 디자인의 수를 보았으며 그 중 많은 것이 도메인 속성 및 소유자 객체의 참조를 저장하는 데 키/아이에게. 이러한 제품은 수백만 달러 (은행/텔코)이므로이 디자인이 이미 효과가있는 것으로 입증 된 것 같습니다.

미안하지만 중간 표가없는 해결책에 대해 질문 한 이후 원래 질문에 대한 답변이 아닙니다.

+0

흥미로운 솔루션. 그러나 이것은 불행히도 검색에서 사용하기가 꽤 어렵거나 비효율적입니다. – AHungerArtist

+0

편집에 응답했습니다. –

관련 문제