ISIS: проблемы со сбором вложений (Blob, Clob) - PullRequest
0 голосов
/ 30 января 2019

Я использую ISIS 1.16.2 для проекта на работе и борюсь с вложениями и некоторыми связанными проблемами.Надеюсь, вы можете помочь мне (по крайней мере, в части моих проблем).

Контекст: в моих классах элементов должно храниться произвольное количество вложений (BLOB-объектов и / или Clobs).

Из примера для одного вложения:

@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?

Может быть, немного не по темено связано с проблемой выше:

Вопрос: Со свойством коллекции List<Blob> attachments; (см. Выше) я получаю ??? EntityModel objectAdapter oid: null для каждого вложения в таблице, поскольку классы Blob / Clob являются типами значений, а не ссылочными типами.Каков «правильный» способ предоставить необходимую информацию для правильной визуализации этих типов значений?(У меня такая же проблема с наборами enum)

Заранее спасибо!

1 Ответ

0 голосов
/ 31 января 2019

Ответ 1 : Невозможно сохранить List<Blob> как одно свойство.Вместо этого вам нужно определить сущность, назвать ее чем-то вроде Document и позволить ей иметь один Blob.Вы можете иметь List<Document>.Это может показаться более трудоемким (это, я полагаю), но у вас, вероятно, будут какие-то метаданные, которые вы хотите сохранить об этих Blob в любом случае.Фактически Blob становится сущностью, а не значением.

Ответ 2 : не поддерживается, см. Предыдущий ответ.

Ответ 3 : нет, это не так.Я думаю, что было бы возможно реализовать что-то вроде этого (я вижу, что у Wicket 7 есть виджет [1] для его поддержки), поэтому поднимите билет на Apache Isis JIRA.

Ans 4 : это то, что объект, такой как Document (согласно ответу 1), позволит вам сделать.Вы все еще можете предоставить действие загрузки, это будет обычное действие для Document ... просто верните Blob в качестве типа возврата действия, и оно будет загружено.Кроме того, если случайно эти сохраненные вами двоичные объекты являются PDF-файлами, обратитесь к программе просмотра pdfjs [2] с платформы incode.

...