Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate在插入/更新blob时使用两倍于文件大小的查询_Java_Mysql_Hibernate - Fatal编程技术网

Java Hibernate在插入/更新blob时使用两倍于文件大小的查询

Java Hibernate在插入/更新blob时使用两倍于文件大小的查询,java,mysql,hibernate,Java,Mysql,Hibernate,我正在使用MySQL和Hibernate将上传的文件保存到数据库中。将文件转换为字节数组,作为简单实体的字段: @实体 @表(name=“TestBlob”) 公共类测试块{ @身份证 @列(name=“id”) @GeneratedValue(策略=GenerationType.AUTO) 私有int-id; @高球 @列(name=“file”) 私有字节[]文件; 公共字节[]getFile(){ 返回文件; } 公共无效设置文件(字节[]文件){ this.file=文件; } } 然

我正在使用MySQL和Hibernate将上传的文件保存到数据库中。将文件转换为字节数组,作为简单实体的字段:

@实体
@表(name=“TestBlob”)
公共类测试块{
@身份证
@列(name=“id”)
@GeneratedValue(策略=GenerationType.AUTO)
私有int-id;
@高球
@列(name=“file”)
私有字节[]文件;
公共字节[]getFile(){
返回文件;
}
公共无效设置文件(字节[]文件){
this.file=文件;
}
}
然后,当我尝试运行以下代码时:

@覆盖
公共void addBlob(TestBlob t){
System.out.println(“尝试上载大小为:+t.getFile().length的文件”);
Session Session=sessionFactory.getCurrentSession();
session.save(t);
}
@凌驾
公共void updateBlob(TestBlob t){
System.out.println(“尝试上载大小为:+t.getFile().length的文件”);
Session Session=sessionFactory.getCurrentSession();
会话.saveOrUpdate(t);
}
我得到这个输出:

Trying to upload file with size:8663040
Hibernate: 
    insert 
    into
        TestBlob
        (file) 
    values
        (?)
...
com.mysql.jdbc.PacketTooBigException: Packet for query is too large (17326125 > 16777216).
我找到的唯一相关帖子是与Postgre相关的帖子。关于我的代码,有什么我可以修改的吗?或者这是我需要知道的一个奇怪的怪癖吗


编辑:需要我将文件保存在blob中。

您需要配置MySQL服务器以处理更大的数据包大小。有关更多信息,请参阅以下MySQL文档:


如果您使用Preparedstatement并且有setBytes,那么doublesize的问题就存在了,因为Mysql驱动程序的行为使大小加倍。请改用setBinaryStream。

我认为最好将文件移出数据库,只将指向数据库中文件的链接放到数据库中