У меня проблема с заполнением подробного представления из базы данных.OpenXava populating Collection из базы данных
application.xml фрагмент кода:
<module name="ModuleB">
<model name="B"/>
<view name="ViewB"/>
...
<mode-controller name="DetailOnly"/>
</module>
У меня есть три класса сущностей:
@Entity
@Table(name="A")
class A {
@OneToMany(mappedBy = "a")
@ListProperties("col1")
@CollectionView("cs")
private Collection<C> cs;//+getter/setters
}
@Entity
@Table(name="A")
@View(name = "ViewB", ...)
class B {
@OneToMany(mappedBy = "a")
@ListProperties(...)
@CollectionView("ViewC")
private Collection<C> cs;//+getter/setters
}
@Entity
@Table(name="C")
@View(name = "ViewC", ...)
class C {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id")
private A a;
}
Я хочу прочитать существующий экземпляр B из базы данных, нажав на ссылку, а затем редактировать/изменять Это. Когда я устанавливаю объект модели с помощью getView(). SetModel() или даже используя getView(). FindObject(), на экране все выглядит хорошо, коллекция показывает его правильное содержание. С другой стороны, когда я пытаюсь сохранить его обратно, в действии сохранения getView(). GetEntity(). Коллекция getCs() имеет значение null. Что мне нужно сделать, чтобы представление соответствовало сущности?
Я использую OpenXava 5.0.1, java 1.7 Важное примечание. Мне не разрешено изменять версию OpenXava, так как это старый проект.
Мое редактирование (20170126) Я создал новый класс, чтобы избежать ссылочных проблем:
@Entity
@Table(name="C")
@View(name = "ViewC", ...)
class D {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id")
private B a;
}
and modified the class B accordingly:
@Entity
@Table(name="A")
@View(name = "ViewB", ...)
class B {
@OneToMany(mappedBy = "a")
@ListProperties(...)
@CollectionView("ViewC")
private Collection<D> cs;//+getter/setters
}
Но результат те же: Записи о подвиде (Коллекция ViewC) загружается из базы данных, и отображается на экране правильно, но я получаю сообщение об ошибке, если я хочу отредактировать Collection ViewC (например: добавить новую запись): «Невозможно выполнить действие« Сохранить »: невозможно создать: объект с этим ключом уже существует » + Как и прежде: в действии сохранения getView(). ge tEntity() collection getCs() null
Я добавил дополнение к моему оригинальному вопросу. Есть ли у вас какие-либо идеи для решения в этом случае? Заранее спасибо! – SzGyD
Я все еще думаю, что ваши цели не работают с JPA/Hibernate. Проверьте свои объекты без OpenXava, просто с классом с main(). Найдите основной объект с JPA и получите коллекцию. Это работает? – javierpaniza