私は Eclipselink JPA を使用しており、DB 接続が後続のクエリで使用できない場合に備えて、ファイルに書き込みたい DB エンティティのコレクションを持っています。Moxy を使用して結果セット全体を単純にマーシャリングし、後でそのファイルをマーシャリング解除して、元の結果セット (JPA エンティティ オブジェクト) を再作成したいと考えています。Eclipselink と Moxy は多少統合されているため、たとえば、JPA コード内で知りたいです。
public void getDataFROMDATABASE() {
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME,getProperties());
EntityManager em = factory.createEntityManager();
// Read the existing entries and write to console
TypedQuery<CtoPolicyMatrix> query = em.createQuery("SELECT pm FROM CtoPolicyMatrix pm", CtoPolicyMatrix.class);
List<CtoPolicyMatrix> results = query.getResultList();
**//NOW PRESIST RESULTS to file IN CASE OF DB CONNECTION FAILURE**
presistMatrixData(results);
em.close();
}
public void presistMatrixData(List results){
// Save CtoPolicyMatrix to XML
try {
jc = JAXBContext.newInstance(CtoPolicyMatrix.class);
Marshaller marshaller = jc.createMarshaller();
StringWriter writer = new StringWriter();
marshaller.marshal(results, writer);
**???? NOT SURE WHAT TO DO HERE TO WRITE MY COLLECTION TO FILE**
} catch (JAXBException e) {
e.printStackTrace();
}
}
public void retrieveMatrixData(List results){
// Load CtoPolicyMatrix from XML
**???? REALLY NOT SURE HOW TO RETRIEVE MY JPA ENTITY COLLECTION FROM FILE**
Unmarshaller unmarshaller;
try {
unmarshaller = jc.createUnmarshaller();
StringReader reader = new StringReader(writer.toString());
List<CtoPolicyMatrix> savedResults = (List<CtoPolicyMatrix>)
Unmarshaller.unmarshal(reader);
} catch (JAXBException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ご協力いただきありがとうございます。