gpt4 book ai didi

java - 如何在不定义@Entity 的情况下使用 EntityManager 将 db BLOB 列转换为 byte[]?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:56:26 37 4
gpt4 key购买 nike

我需要从 Oracle 数据库中提取一个 BLOB 字段。我将 Spring 与 EntityManager 一起使用,但我不想经历所有定义 @Entity 对象来表示表的工作。

我做了这样的事情......

String sql = "select * from MY_TABLE where ID = '"+id+"'";
List<Object> resultList = em.createNativeQuery(sql).getResultList();
for (Object o : resultList) {
try {
if (o != null) {
Object[] element = (Object[])o;
byte[] data = (byte[])element[1];
}

...但问题是“element[1]”是一个“SerialBlobProxy”对象,而不是字节数组。

有没有一种简单的方法可以将“element[1]”转换为 byte[] 数组?

最佳答案

Spring JPA 是否允许展开底层实体管理器连接,然后运行低级 jdbc 结果集和 getter 。您获得的连接实例取决于 JPA 事务是否处于 Activity 状态。

Connection con = em.unwrap(Connection.class);

如果您启动了 EM 事务,您将获得相同的连接,因此请注意不要过早关闭、提交、回滚。您可能希望使用 EM 方法来完成事务。在没有 Activity 事务的情况下展开连接会创建一个新实例,因此调用者必须关闭此连接。

在 JPA 应用程序中使用 jdbc 类没有错,高级接口(interface)可能并不总是适合所有任务。 JPA 规范所有者知道这一点,幸运的是我们没有强制执行它。

关于java - 如何在不定义@Entity 的情况下使用 EntityManager 将 db BLOB 列转换为 byte[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34143625/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com