java - 使用 Hibernate 在 MySQL 中存储字节数组

标签 java mysql spring hibernate jpa

我正在尝试保存一个带有字节数组字段的实体。我在 MySQL 数据库上使用 Hibernate 和 JPA。 这是字段定义,它适用于嵌入式 H2 数据库:

@Entity(name = "blob")
public class Blob {
    ...
    @Lob
    @Basic(fetch = FetchType.LAZY)
    @Column(name = "blobImg", nullable = false)
    private byte[] blobImg;
}

现在,对于 MySQL 数据库,每次执行 blobRepository.save() 时都会抛出异常。实际上,当 Hibernate 尝试自动创建 Blob 实体表时,可能会抛出。异常(exception)情况如下:

o.h.engine.jdbc.spi.SqlExceptionHelper : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'blob (blobCols, blobImg, blobRows, channel, idBlobPersistence) values (50, _bina' at line 1

我尝试使用在网上找到的几种方法来更改字段定义:

方法一:

@Column(name = "blobImg", nullable = false, columnDefinition = "BINARY(256)", length = 256)
private byte[] blobImg;

方法二:

@Lob
@Column(name="blobImg", columnDefinition="bytea")
private byte[] blobImg;

方法 3: 在 blob.hbm.xml 文件上定义一个 hibernate 映射并从 entityManagerFactory bean 引用它:

<?xml version='1.0' encoding='UTF-8'?>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
    <property name="mappingResources">  
        <list>  
            <value>blob.hbm.xml</value>  
        </list>  
    </property>
</bean>

blob.hbm.xml 映射:

<hibernate-mapping>
    <class name="guiatv.persistence.domain.Blob" table="blob">
        <property name="blobImgProperty">
            <column name="blobImg" sql-type="binary"></column>
        </property>
    </class>
</hibernate-mapping>

方法 4: 将 blob.hbm.xml 映射更改为以下内容:

<?xml version='1.0' encoding='UTF-8'?>
<hibernate-mapping>
    <class name="guiatv.persistence.domain.Blob" table="blob">
        <property name="blobImg" type="binary">
            <column name="blobImg" />
        </property>
    </class>
</hibernate-mapping>

它们都抛出相同的异常。

我该如何解决? 谢谢!

最佳答案

如果你想把你的byte[]转换成sql类型的Blob,你可以这样做:

@Lob(type = LobType.BLOB)

@Type(type = "org.hibernate.type.BlobType")
@Lob

希望对你有帮助

关于java - 使用 Hibernate 在 MySQL 中存储字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32572422/

相关文章:

Spring:正确设置@ComponentScan

跨对象的 Java 同步

php - MySQL 更新查询 - 按行号

php - mysql_free_result() 或 mysql_close()

php - MySQL UPDATE 查询语法错误?

java - Spring 应用程序抛出 ArrayIndexOutOfBoundsException

java - Spring:@Autowired 不与 ApplicationContext 一起工作

java - 自动增量不适用于具有复合键的实体类

java - RabbitMQ 始终远程连接到 guest 用户

java - 初学者的错误(args[0])