Java 我可以为JPA实体中的大型对象选择File或InputStream吗?

Java 我可以为JPA实体中的大型对象选择File或InputStream吗?,java,jpa,entity,inputstream,Java,Jpa,Entity,Inputstream,我想在数据库中存储一个大对象。我是用JPA的方式做的。 实体: 我可以选择pdfFile字段作为直接文件还是输入流?如果是,使用它有什么好处?您可以在实体类中使用: @Column(name = "DATA", unique = false, nullable = false, length = 100000) private byte[] data; session.beginTransaction(); File file =

我想在数据库中存储一个大对象。我是用JPA的方式做的。 实体:


我可以选择pdfFile字段作为直接文件还是输入流?如果是,使用它有什么好处?

您可以在实体类中使用:

        @Column(name = "DATA", unique = false, nullable = false, length = 100000)
        private byte[] data;

        session.beginTransaction();
        File file = new File("C:\test.png");
        byte[] imageData = new byte[(int) file.length()];

        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            fileInputStream.read(imageData);
            fileInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        ImageWrapper image = new ImageWrapper();
        image.setImageName("test.jpeg");
        image.setData(imageData);
        session.save(image);    //Save the data

        session.getTransaction().commit();
用于保存在数据库中的大型文件

但最好将文件保存在某个位置,然后将该位置保存在数据库中

数据库存储通常比文件系统存储更昂贵


Blog:。

你试过其中任何一种吗?我知道在DataNucleus JPA中,你可以做文件,并且它在persist中流式处理文件的内容,因此具有不加载到内存的优点。仅供参考,我认为Hibernate不存在这个问题,他说JPA@NeilStocktonHibernate内部仅使用JPA。看起来问题中使用了@Entity、@Id等。这些只是冬眠状态。谢谢:@Entity、@Id是JPA的标准。Hibernate只是JPA的一个实现。
        @Column(name = "DATA", unique = false, nullable = false, length = 100000)
        private byte[] data;

        session.beginTransaction();
        File file = new File("C:\test.png");
        byte[] imageData = new byte[(int) file.length()];

        try {
            FileInputStream fileInputStream = new FileInputStream(file);
            fileInputStream.read(imageData);
            fileInputStream.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

        ImageWrapper image = new ImageWrapper();
        image.setImageName("test.jpeg");
        image.setData(imageData);
        session.save(image);    //Save the data

        session.getTransaction().commit();