当前位置: 首页 > 知识库问答 >
问题:

使用Eclipselink和Moxy将List写入文件

翟青青
2023-03-14

我使用的是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();
    }
}

感谢您提供的任何帮助。

共有1个答案

鲍飞星
2023-03-14

你在正确的轨道上。为了使事情尽可能简单,我建议创建一个包装器对象来包含结果列表,然后封送/解封该包装器对象。

包装对象可以如下所示:

import java.util.List;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class MatrixData {

    private List<CtoPolicyMatrix> data;

    public List<CtoPolicyMatrix> getData() {
        return data;
    }

    public void setData(List<CtoPolicyMatrix> data) {
        this.data = data;
    }

}

您的持久性MatrixData方法如下所示:

public void persistMatrixData(List results) {
    // Save CtoPolicyMatrix to XML
    try {
        MatrixData data = new MatrixData();
        data.setData(results);

        File file = new File("D:/Temp/MatrixData.xml");

        jc = JAXBContext.newInstance(MatrixData.class);
        Marshaller marshaller = jc.createMarshaller();
        marshaller.marshal(data, file);
    } catch (JAXBException e) {
        e.printStackTrace();
    }
}

并将其读回:

public void retrieveMatrixData(List results) {
    // Load CtoPolicyMatrix from XML
    Unmarshaller unmarshaller;
    try {
        File file = new File("D:/Temp/MatrixData.xml");

        unmarshaller = jc.createUnmarshaller();
        MatrixData data = (MatrixData) u.unmarshal(file);

        List<CtoPolicyMatrix> savedResults = data.getData();
    } catch (JAXBException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

希望这有帮助,

瑞克

 类似资料:
  • 我不明白为什么我在下面所做的XmlPath映射会显示为NULL。我的语法有问题吗?我在别处使用了类似的语法,没有问题。 谢谢你提供的线索..约翰

  • 问题内容: 我有一个示例课: 当用MOXy序列化时,我得到: 为什么鸟,猫和狗不是数组,为什么使用数组指示符“ []”?第二,是否有摆脱“鸟”,“猫”和“狗”的方法? 换句话说,我试图到达: 谢谢,Behzad 问题答案: 问题#1 为什么鸟,猫和狗不是数组,为什么使用数组指示符“ []”? 为了获得此JSON表示,您已经将模型与注释映射,该注释告诉JAXB使用注释的值作为继承指示符。使用MOXy

  • 我有一个巨大的java类文件,其中包含嵌套类编码的所有内容。在我按照我想要的方式完成所有工作之后,有了我需要的XML输出...我将嵌套类拆分到它们自己的类文件中。 但是,当我运行代码时,我的所有@XMLPath注释都被忽略了。只有javax.xml.bind.annotation.*中的本机版本仍然有效... 好吧..所以我把所有的嵌套类放回原样,重新运行代码,@xmlpath(实际上MOXy的东

  • 问题内容: 输出文件包含: 问题出在哪里?如何使用写入文本文件? 问题答案: 你必须写String … 你可以试试。 要么 要么

  • 有人能帮助我使用EclipseLink MOXY使用JAXB编组生成带有重复标记的XML吗。 使用下面的方法,我将从带注释的bean生成XML。 多谢你

  • 问题内容: 因为不插入换行符,这是将列表写入文件的最干净的方法吗? 似乎会有一种标准的方法… 问题答案: 你可以使用循环: 在Python 2中,你也可以使用 如果你热衷于单个函数调用,请至少移除方括号[],以便一次打印一个字符串(一个而不是一个)-没有理由占用所有内存具体化整个字符串列表。