Java JPA writes object to binary

  • Database (User)
    ID Name 1 Ali
    2 Abu
    3 Ahmad

  • 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();
    }
    
  • ReadBinaryFile.java

    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());
    
  • When I read ReadBinaryFile.java, I can get the result as follows:
     3 Ahmad

  • My expected result:
    1 Ali
    2 Abu
    3 Ahmad

  • What am I doing wrong? How can I solve it?

+4
source share
1 answer

Do you rewrite the file in each loop?

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();
}

You need to either create a new file for each user, or write the entire list and read it back.

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());
}
+3
source

All Articles