小编Tho*_*her的帖子

使用从EJB到数据库的流保存blob(以内存有效的方式)

我想在数据库中保存大附件(500Mb,如果可能,甚至> 2Gb).我知道这样做的利弊经常被讨论,但这不是我的问题的焦点.

使用JPA在EJB3中存储Blob字段的传统方法是使用如下代码:

@Lob
private byte[] data;
Run Code Online (Sandbox Code Playgroud)

处理大量数据源时会出现问题,因为整个字节数组都保存在内存中.

我试图将其更改为Blob:

@Lob
private Blob data;
Run Code Online (Sandbox Code Playgroud)

但这会导致同样的问题.打电话的时候

// session: Hibernate session.
// Actually, I'd like to stay with JPA's abstraction and not
// reference Hibernate directly, if possible
Blob data = session.createBlob(inputStream, lengthOfStream);
Run Code Online (Sandbox Code Playgroud)

createBlob方法从inputStream创建一个byteArray.

由于ORM映射,我也想知道如何处理数据的插入.一个想法是创建一个实体变量

@Lob
private byte[] data;
Run Code Online (Sandbox Code Playgroud)

我永远不会用.这样,数据库模式就可以构建了.但是因为@Lob注释是懒惰的,所以它不会让我的记忆膨胀.

然后写

entityManager.persist(dataObject);
// The following lines are _completely_ imaginatory!!
query.prepare("update DataObject d set d.data = :dataInputStream where d = :dataObject");
query.setProperty("dataObject", dataObject);
query.setProperty("dataInputStream", someDataInputStream);
Run Code Online (Sandbox Code Playgroud)

我偶然发现的一个解决方案看起来不错,但是没有使用JPA: Grooviest方法将BLOB存储在数据库中?

有人建议怎么做吗?

ejb jpa blob java-ee-6 jboss7.x

7
推荐指数
1
解决办法
4967
查看次数

使用p:commandbutton提交多个表单

我想通过一个提交按钮提交多个表单.我有多种形式,因为每个p:fileUpload都需要一个自己的表单(当处于高级模式时).

这是我的提交按钮的代码:

<h:form id="form1">...</h:form>
<h:form id="form2">...</h:form>
<h:form>
    <p:commandButton value="Save" widgetVar="saveButtonBottom"
    action="#{bean.submit}" ajax="false"
    process=":form1,:form2,@this" />
</h:form>
Run Code Online (Sandbox Code Playgroud)

它确实调用了bean.submit(),但它不处理其他形式.也许我对处理的理解是错误的,但我想如果我把表单放入"流程",那么它将被提交.

知道如何让它工作吗?

jsf primefaces jsf-2

5
推荐指数
2
解决办法
2万
查看次数

标签 统计

blob ×1

ejb ×1

java-ee-6 ×1

jboss7.x ×1

jpa ×1

jsf ×1

jsf-2 ×1

primefaces ×1