2014-02-13 2 views
1

제 웹 응용 프로그램에서 DB에서 동일한 데이터를 웹 응용 프로그램으로 가져 왔으므로 많은 시간이 걸립니다. 내가 한 것은 데이터를 가져 와서 HashMap에 넣었다는 것입니다. 그렇게하면 웹 응용 프로그램에 매번 가져올 필요가 없습니다. 그러나 큰 문제는 모든 사용자가 변경되는 동일한 데이터에서 작동한다는 것입니다. 첫 번째 질문은 : DB에서 가져온 데이터를 HashMap에 저장하는 것이 맞습니까? 매번 DB에서 쿼리하지 않아도됩니까? 두 번째 질문은 데이터를 저장하기 위해 HashMap을 사용할 수있는 경우에 대비하여 가져온 데이터를 전체 복사본으로 만들거나 복제하여 HashMap에 넣어야하므로 각 사용자가 원본 데이터의 복사본을 갖게됩니다. 권리?자바 복제본 딥 카피 HashMap

복제해야하는 객체는 다른 객체 및 HashMaps에 대한 참조를 갖는 전송 객체입니다. 과정은 다음과 같습니다. 먼저 DB에서 데이터를 가져 와서 클래스를 만들고 모든 클래스를 전송 객체에 넣은 다음 전송 객체를 해시 맵에 저장합니다. 다음에 hashmap에서 데이터를 가져옵니다.

모든 도움에 감사드립니다. 편집 : DB에서 가져온 데이터는 온라인 양식을 만들고 이름과 주소, 성별과 같은 기본값을가집니다 ... 모든 사용자는 자신의 목적에 맞게 양식을 편집해야합니다. 모든 사용자는 자신의 복사본을 가지고 작업해야합니다.

+0

예, 당신이 할 수없는, 어떤 당신이 깊은 복사본을 만들 필요가 없습니다. 기본적으로 깊은 복사본을 사용하는 데이터베이스 캐싱 솔루션에 대해서는 잘 모릅니다. –

+0

안녕하세요. 피터, 귀하의 회신에 감사드립니다. 나는 데이터베이스 캐싱 솔루션을 원하지 않는다. 어떻게 든 전송 객체를 복제하여 각 사용자가 자신의 사본을 사용할 수있게했습니다. – duracell

+0

또는 사용자가 개체를 변경할 수 없도록 할 수 있습니다. –

답변

4

딥 클론을 만드는 가장 간단한 방법은 객체를 직렬화/비 직렬화하는 것입니다. 해시 맵의 모든 키/값이 java.io.Serializable을 구현하는 경우에만 작동합니다.

예 :

public <T extends Serializable> T deepClone(T o) { 
    ByteArrayOutputStream byteOut = new ByteArrayOutputStream(); 
    ObjectOutputStream out = new ObjectOutputStream(byteOut); 
    out.writeObject(o); 
    out.flush(); 
    ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(byteOut.toByteArray()); 
    return o.getClass().cast(in.readObject()); 
} 
+0

안녕 랜스, 고마워! 일부 프레임 워크 (SerializationUtils, Java DeepCloning LibraryDozer 및 Kryo)가 있습니다. 일부는 직렬화를 사용하고 일부는 딥 클론을 사용하여 리플렉션을 사용합니다. 어떻게 든 전송 객체를 복사했지만 결국 복제해야한다는 것을 알게되어 기쁩니다. 감사 – duracell