Я не понимаю, как я могу реализовать отношения внешнего ключа с SQLContainer от Vaadin. Давайте предположим, что у меня есть две таблицы:Vaadin SQLContainer Reference - как реализовать отношение внешних ключей?
- BOOK с атрибутами название и * author_id *
- АВТОР с атрибутами * id_author, first_name * и * last_name *
Из Coure BOOK.author_id ссылается на AUTHOR.id Я уже создал MySQL-DB со всеми необходимыми ограничениями. Кроме того, я создал контейнеры и заполнил их следующим образом:
private static void initContainers() {
try {
/* TableQuery and SQLContainer for book -table */
TableQuery q1 = new TableQuery("book", connectionPool);
bookContainer = new SQLContainer(q1);
/* TableQuery and SQLContainer for author -table */
TableQuery q2 = new TableQuery("author", connectionPool);
authorContainer = new SQLContainer(q2);
} catch (SQLException e) {
e.printStackTrace();
}
}
@SuppressWarnings("unchecked")
public boolean addBook(Book book) {
Object id_author = authorContainer.addItem();
authorContainer.getContainerProperty(id_author, "first_name").setValue(book.getAuthor().getFirstName());
authorContainer.getContainerProperty(id_author, "last_name").setValue(book.getAuthor().getLastName());
Object id = bookContainer.addItem();
bookContainer.getContainerProperty(id, "title").setValue(book.getTitle());
//HERE IS MY TRY FOR ADDING THE REFERENCE (FOREIGN KEY RELATION)
bookContainer.addReference(authorContainer, "author_id", "id_author");
authorContainer.setReferencedItem("id_author", "author_id", bookContainer);
bookContainer.getContainerProperty(id, "author").setValue(bookContainer.getReferencedItem("id_author", authorContainer));
try {
authorContainer.commit();
bookContainer.commit();
return true;
} catch (UnsupportedOperationException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
Может ли кто-нибудь сказать мне, что я сделал не так? Я также попытался передать контейнер-автор перед добавлением ссылки, но это тоже не сработало.
Я всегда получаю NullPointerException при * bookContainer.getReferencedItem ("id_author", authorContainer) *