Java JPA将对象写入二进制文件

Java JPA将对象写入二进制文件,java,jpa,binaryfiles,Java,Jpa,Binaryfiles,数据库(用户) IDName 1Ali 2Abu 3Ahmad WriteBinaryFile.java EntityManagerFactory emf = Persistence.createEntityManagerFactory("UserPU"); EntityManager em = emf.createEntityManager(); Query query1 = em.createNativeQuery("select * from user",User.class); Lis

数据库(用户)
IDName
1Ali
2Abu
3Ahmad

  • WriteBinaryFile.java

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("UserPU");
    EntityManager em = emf.createEntityManager();
    
    Query query1 = em.createNativeQuery("select * from user",User.class);
    List<User> list = query1.getResultList();
    
    for(User userList: list){
        FileOutputStream fos = new FileOutputStream("test.dat");
        ObjectOutputStream oos = new ObjectOutputStream(fos);
    
        oos.writeObject(userList);
        oos.close();
    }
    
    FileInputStream fis = new FileInputStream("test.dat");
    ObjectInputStream ois = new ObjectInputStream(fis);
    
    User user1 = (User) ois.readObject();
    ois.close();
    System.out.println(user1.getID+" "+user1.getName());
    
  • 当我阅读ReadBinaryFile.java时,我只能得到如下输出:
    3艾哈迈德

  • 我的预期输出:
    1阿里
    2阿布
    3艾哈迈德

  • 我做错了什么?我怎样才能解决它


    • 您不是在每个循环中覆盖文件吗

      for(User user: list){
          //overwrites the file on each loop
          FileOutputStream fos = new FileOutputStream("test.dat");
          ObjectOutputStream oos = new ObjectOutputStream(fos);
      
          oos.writeObject(user);
          oos.close();
      }
      
      您需要为每个用户创建一个新文件,或者写入整个列表并将其读回

      FileOutputStream fos = new FileOutputStream("test.dat");
      ObjectOutputStream oos = new ObjectOutputStream(fos);
      
      oos.writeObject(list);
      oos.flush();
      oos.close(); 
      
      FileInputStream fis = new FileInputStream("test.dat");
      ObjectInputStream ois = new ObjectInputStream(fis);
      
      List<User> users = (List<User>) ois.readObject();
      ois.close();
      
      for(User user : users){
          System.out.println(user.getID() +" " + user.getName());
      }
      
      FileOutputStream fos=新的FileOutputStream(“test.dat”);
      ObjectOutputStream oos=新的ObjectOutputStream(fos);
      oos.writeObject(列表);
      oos.flush();
      oos.close();
      FileInputStream fis=新的FileInputStream(“test.dat”);
      ObjectInputStream ois=新ObjectInputStream(fis);
      List users=(List)ois.readObject();
      ois.close();
      for(用户:用户){
      System.out.println(user.getID()+“”+user.getName());
      }
      
      问题显然在于
      列表中包含的数据。进行适当的调试,找出查询返回单个结果而不是所有结果的原因。