【发布时间】: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