2013-04-12 4 views
1

Я не понимаю, как я могу реализовать отношения внешнего ключа с SQLContainer от Vaadin. Давайте предположим, что у меня есть две таблицы:Vaadin SQLContainer Reference - как реализовать отношение внешних ключей?

  1. BOOK с атрибутами название и * author_id *
  2. АВТОР с атрибутами * 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) *

ответ

1

попробовать authorContainer.getReferencedItem("id_author", bookContainer)

Смежные вопросы