ISIS:附件收集问题(斑点,碎片)

时间:2019-01-30 13:48:58

标签: java jdo isis

我在工作中的项目中使用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类是值类型,而不是值类型参考类型。提供必要信息以正确呈现这些值类型的“正确”方法是什么? (我对枚举集也有同样的疑问)

谢谢!

1 个答案:

答案 0 :(得分:1)

答案1 :不可能将List<Blob>存储为单个属性。相反,您需要定义一个实体,将其命名为Document之类,并使其具有单个Blob。然后,您可以拥有一个List<Document>。这可能看起来需要更多工作(我想是的),但是无论如何,您可能都会有一些元数据要存储在这些Blob上。实际上,Blob成为实体而不是值。

答案2 :不受支持,请参见以前的答案。

答案3 :不,不是。我认为有可能实现这样的事情(我发现Wicket 7有一个支持它的小部件[1]),因此可以在Apache Isis JIRA上获得一张票。

答案4 :这是诸如Document(按答案1)之类的实体允许您执行的操作。您仍然可以提供下载操作,这将是对Document的常规操作...只需将Blob作为操作的返回类型返回即可下载。另外,如果您存储的这些Blob可能是PDF,请从Incode平台中检出pdfjs查看器[2]。