ISIS:附件收集问题(Blob,Clob)
ISIS: Problems with Collection of Attachments (Blob, Clob)
我正在为一个工作项目使用 ISIS 1.16.2,并且正在努力解决附件和一些相关问题。我希望,你能帮助我(至少是我的一部分问题)。
上下文:我的项目 classes 需要存储任意数量的附件(Blob and/or 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<>();
- 问题:
我必须如何注释此字段,以便此列表的元素存储在自包含的 table 中,而不是序列化到包含对象的单个列中?不幸的是,我还不熟悉嵌套类型的这些注释。
- 问题:
ISIS 可以同时处理多个文件上传吗?例如作为一个动作:
@Action public void uploadFiles(List<Blob> files) {...}
- 问题:
ISIS 1.16.2(或未来版本)是否可以使用 Blob/Clob 条目(例如大小、所有者等)在专用 table 中存储一些元信息,而不会失去 ISIS/Wicket 显示自定义扩展 BLOB 的下载按钮、预览等 class?
可能有点题外话但与上面的问题有关:
- 问题: 使用集合 属性
List<Blob> attachments;
(见上文),[=57] 中的每个附件我得到 ??? EntityModel objectAdapter oid: null
=] 因为 Blob/Clob class 是值类型而不是引用类型。 "right" 提供必要信息以正确呈现这些值类型的方法是什么? (我对枚举集有同样的问题)
提前致谢!
答案 1:无法将 List<Blob>
存储为单个 属性。相反,您需要定义一个实体,将其命名为 Document
,并让它有一个 Blob
。然后你可以有一个List<Document>
。这可能看起来需要更多的工作(我想确实如此),但您可能有一些元数据想要存储关于那些 Blob
的元数据。实际上,Blob
变成了一个实体而不是一个值。
回答2:不支持,看之前的回答。
答3:不,不是。我认为有可能实现这样的东西(我看到 Wicket 7 有一个小部件 [1] 来支持它),所以在 Apache Isis JIRA 上提出一个问题。
答案 4:这是 Document
(根据答案 1)等实体会让你做的。您仍然可以提供下载操作,这将是 Document
上的常规操作...只是 return Blob
作为操作的 return 类型并且它'会被下载。此外,如果您存储的这些 blob 是 PDF,请从 incode 平台查看 pdfjs 查看器 [2]。
我正在为一个工作项目使用 ISIS 1.16.2,并且正在努力解决附件和一些相关问题。我希望,你能帮助我(至少是我的一部分问题)。
上下文:我的项目 classes 需要存储任意数量的附件(Blob and/or 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<>();
- 问题: 我必须如何注释此字段,以便此列表的元素存储在自包含的 table 中,而不是序列化到包含对象的单个列中?不幸的是,我还不熟悉嵌套类型的这些注释。
- 问题:
ISIS 可以同时处理多个文件上传吗?例如作为一个动作:
@Action public void uploadFiles(List<Blob> files) {...}
- 问题: ISIS 1.16.2(或未来版本)是否可以使用 Blob/Clob 条目(例如大小、所有者等)在专用 table 中存储一些元信息,而不会失去 ISIS/Wicket 显示自定义扩展 BLOB 的下载按钮、预览等 class?
可能有点题外话但与上面的问题有关:
- 问题: 使用集合 属性
List<Blob> attachments;
(见上文),[=57] 中的每个附件我得到??? EntityModel objectAdapter oid: null
=] 因为 Blob/Clob class 是值类型而不是引用类型。 "right" 提供必要信息以正确呈现这些值类型的方法是什么? (我对枚举集有同样的问题)
提前致谢!
答案 1:无法将 List<Blob>
存储为单个 属性。相反,您需要定义一个实体,将其命名为 Document
,并让它有一个 Blob
。然后你可以有一个List<Document>
。这可能看起来需要更多的工作(我想确实如此),但您可能有一些元数据想要存储关于那些 Blob
的元数据。实际上,Blob
变成了一个实体而不是一个值。
回答2:不支持,看之前的回答。
答3:不,不是。我认为有可能实现这样的东西(我看到 Wicket 7 有一个小部件 [1] 来支持它),所以在 Apache Isis JIRA 上提出一个问题。
答案 4:这是 Document
(根据答案 1)等实体会让你做的。您仍然可以提供下载操作,这将是 Document
上的常规操作...只是 return Blob
作为操作的 return 类型并且它'会被下载。此外,如果您存储的这些 blob 是 PDF,请从 incode 平台查看 pdfjs 查看器 [2]。