繁体   English   中英

Vaadin SQLContainer参考-如何实现外键关系?

[英]Vaadin SQLContainer Reference - how to implement foreign key relation?

我不知道如何使用Vaadin的SQLContainer实现外键关系。 假设我有两个表:

  1. 带有属性title和* author_id *的书
  2. 具有属性* id_author,first_name *和* last_name *的作者

当然,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;
}

谁能告诉我我在这里做错了什么? 在添加引用之前,我也尝试提交author-container,但这也不起作用。

我总是在* bookContainer.getReferencedItem(“ id_author”,authorContainer)*上获得NullPointerException

尝试authorContainer.getReferencedItem("id_author", bookContainer)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM