Привет!
Есть сущность и есть экранные формы редактирования и browse к ней (InternalEmailer). Все хорошо и стандартно работает. Хочу расширить сущность InternalEmailerTemplate и добавить к ней поле и расширить экран, чтоб добавить к ней редактирование нового расширенного поля.
Ну сущность вроде как “расширил” успешно:
@DiscriminatorValue("0")
@Entity(name = "itpearls_InternalEmailerTemplate")
@NamePattern("%s %s %s|fromEmail,toEmail,dateSendEmail")
public class InternalEmailerTemplate extends InternalEmailer {
private static final long serialVersionUID = 1487827434848726699L;
@Lookup(type = LookupType.DROPDOWN, actions = {})
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "EMAIL_TEMPLATE_ID")
private InternalEmailTemplate emailTemplate;
public InternalEmailTemplate getEmailTemplate() {
return emailTemplate;
}
public void setEmailTemplate(InternalEmailTemplate emailTemplate) {
this.emailTemplate = emailTemplate;
}
}
Экран редактирования тоже норм, согласно инструкции.
Дескриптор:
<data>
<instance id="emailerDc"
class="com.company.itpearls.entity.InternalEmailerTemplate">
<view extends="_local">
<property name="emailTemplate" view="_local"/>
</view>
<loader/>
</instance>
<collection id="emailTemplateDc"
class="com.company.itpearls.entity.InternalEmailTemplate">
<view extends="_local">
<property name="templateAuthor" view="_local"/>
<property name="templateOpenPosition" view="_local"/>
<property name="templatePosition" view="_local"/>
</view>
<loader id="emailTemplateDl">
<query>
<![CDATA[select e from itpearls_InternalEmailTemplate e]]>
</query>
</loader>
</collection>
</data>
<layout>
<groupBox id="emailSettingGroupBox"/>
<lookupPickerField id="templateEmailLookupPickerField"
dataContainer="emailerDc"
property="emailTemplate"
optionsContainer="emailTemplateDc"/>
</layout>
Контроллер
@UiController("itpearls_InternalEmailerTemplate.edit")
@UiDescriptor("internal-emailer-template-edit.xml")
public class InternalEmailerTemplateEdit extends InternalEmailerEdit {
}
Вызываю экран по invoke нажатию кнопки:
screenBuilders.editor(InternalEmailerTemplate.class, this)
.withScreenClass(InternalEmailerTemplateEdit.class)
.newEntity()
.withInitializer(e -> {
e.setFromEmail((ExtUser) userSession.getUser());
e.setToEmail(jobCandidatesTable.getSingleSelected());
})
.build()
.show();
Выходит эксепшн
DevelopmentException: Invalid item’s metaClass ‘itpearls_InternalEmailer’
container: InstanceContainerImpl{entity=itpearls_InternalEmailerTemplate, view=com.company.itpearls.entity.InternalEmailerTemplate/}
metaClass: itpearls_InternalEmailer
То есть судя по всему получается что вызываю новую сущность InternalEmailerTemplate, а metaClass от старок InternalEmailer.
Подскажите, пожалуйста, что сделать?
ps:
persistence.xml
<class>com.company.itpearls.entity.InternalEmailer</class>
<class>com.company.itpearls.entity.InternalEmailerTemplate</class>
в metadata.xml - не добавлял ничего