2

我正在将 ISIS 1.16.2 用于工作中的项目,并在附件和一些相关问题上苦苦挣扎。我希望你能帮助我(至少对于我的一部分问题)。

上下文:我的项目类需要存储任意数量的附件(Blob 和/或 Clob)。

从一个附件的示例中:

@Persistent(defaultFetchGroup = "false",
    columns = { @Column(name = "attachment_name"),
                @Column(name = "attachment_mimetype"),
                @Column(name = "attachment_bytes",
                    jdbcType = "BLOB",
                     sqlType = "LONGVARBINARY")
    })
@Column(allowsNull = "true")
private Blob attachment;

多个附件的第一种方法:

@javax.jdo.annotations.Persistent(???)
@org.apache.isis.applib.annotation.Property(
        domainEvent = AttachmentDomainEvent.class,
        optionality = Optionality.OPTIONAL,
        hidden = Where.ALL_TABLES)
@org.apache.isis.applib.annotation.Collection
@lombok.Getter
private List<Blob> attachments = new LinkedList<>();
  1. 问题: 我如何注释这个字段,以便这个列表的元素存储在一个自包含的表中,而不是被序列化到包含对象的单个列中?不幸的是,我还不熟悉嵌套类型的这些注释。
  2. 问题: ISIS 可以同时处理多个文件上传吗?例如作为一个动作:@Action public void uploadFiles(List<Blob> files) {...}
  3. 问题: ISIS 1.16.2(或未来版本)是否可以在专用表中存储一些带有 Blob/Clob 条目(例如大小、所有者等)的元信息,而不会失去 ISIS/Wicket 显示自定义扩展 BLOB 类的下载按钮、预览等?

也许有点题外话,但与上述问题有关:

  1. 问题:使用集合属性List<Blob> attachments;(见上文),我得到??? EntityModel objectAdapter oid: null了表中的每个附件,因为 Blob/Clob 类是值类型而不是引用类型。提供必要信息以正确呈现这些值类型的“正确”方式是什么?(我对枚举集有同样的问题)

提前致谢!

4

1 回答 1

1

Ans 1:不可能将 a 存储List<Blob>为单个属性。相反,您需要定义一个实体,将其命名为Document,并让它有一个Blob. 然后,您可以拥有一个List<Document>. Blob这可能看起来像是更多的工作(我想是的),但无论如何你可能会有一些你想要存储的关于那些 s 的元数据。实际上,它Blob变成了一个实体而不是一个值。

Ans 2:不支持,请参阅上一个答案。

答案 3:不,它没有。我认为有可能实现这样的东西(我看到 Wicket 7 有一个小部件 [1] 来支持它),所以请在 Apache Isis JIRA 上提出一张票。

Ans 4:这就是Document(根据 ans. 1)这样的实体会让你做的事情。您仍然可以提供下载操作,这将是对Document... 的常规操作,只需返回Blob作为操作的返回类型,它就会被下载。此外,如果您存储的这些 blob 是 PDF,那么请从 incode 平台查看 pdfjs 查看器 [2]。

于 2019-01-30T23:07:04.417 回答