【问题标题】:Jpa TypedQuery and byte[]Jpa TypedQuery 和 byte[]
【发布时间】:2018-03-24 13:25:23
【问题描述】:

我有一个这样的类型化查询:

TypedQuery<Object[]> query = em.createQuery("SELECT c.id , c.name, g.id, g.brand, g.price,g.goodsImage FROM Category c JOIN c.goods g WHERE g.user.userId=:userId and g.class=:type",Object[].class);
            query.setParameter("userId", userId);
            query.setParameter("type", type.toUpperCase());

其中 g.goodsImage 是一个字节数组。 我不知道,如何将 object[5] 转换为 byte[]?

我试图序列化对象,但我没有任何运气。

这是我尝试过的:

ByteArrayOutputStream bos = new ByteArrayOutputStream();
                 ObjectOutput out;
                try {
                    out = new ObjectOutputStream(bos);
                     out.writeObject(object[5]);
                     byte[] image = new byte[ bos.size()];
                     image  = bos.toByteArray();

                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

如果我这样做:

  TypedQuery<byte[]> query = em.createQuery("SELECT g.goodsImage From Goods g ",byte[].class);

这可行,但第一个 Typed Query 不行。

你知道如何将 object[] 转换为 byte[] 吗?

【问题讨论】:

  • 您的查询以Object[] 形式返回每一行的结果,那么结果行的第 6 个元素是什么类?
  • 是的,例如,我的查询返回 N 行。第6个元素(g.goodImage是一个byte[]类型),我存储一个图片文件。
  • 它以什么形式返回?如果 QUERY RETURN 中的那个元素是一个 byte[],那么你将该元素大小写为 byte[]。为什么不通过执行查询来更新您的问题,以便我们显示结果对象?
  • 天哪,你没事。只有投射才会起作用。
  • 非常感谢。这样做可以goods.goodsImage = (byte[]) object[5];我认为我需要序列化和所有这些。谢谢

标签: java arrays image jpa serialization


【解决方案1】:

正如 DN1 告诉我的,投射对象会起作用:

goods.goodsImage = (byte[]) object[5];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2021-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多