保存到模型对象的ArrayList

时间:2013-05-05 23:01:51

标签: arraylist playframework-2.0

我正在使用Play Framework 2.0.4,在我的模型类中,其中一个变量是Array List<Long>数据类型,在此处声明:

public List<Long> associateBooks = new ArrayList<Long>(); 

我有一个视图模板,它调用一个带有两个Long值的控制器方法,这两个Long值表示同一模型类型的两个不同对象的id。

GET     /addAssociate/:oID/:id              controllers.Application.addAssociate(oID: Long, id: Long)

调用控制器方法:

public static Result addAssociate(Long oID, Long id) {

    Book.addAssociate(oID, id);
    return redirect(routes.Application.index());
}

我知道控制器方法正在执行其操作,因为我被重定向到索引页面,我知道它接收到值,因为URL会按预期更改。

问题在于下面显示的Book模型方法addAssociate。

public static void addAssociate(Long oID, Long match) {

    List<Book> allBooks = new ArrayList<Book>();
    allBooks = find.all();

    for(Book book: allBooks) {

        if(book.id == oID) {
            book.associateBooks.add(match);
            book.save();
        }
    }
}

在这个方法中,我想浏览所有书籍对象,如果id匹配从视图传递给控制器​​的变量oID的值,我想将匹配值(另一个争论)添加到属于每个旅程对象的associateBooks列表(类型Long)。然后我尝试将更改保存到此迭代期间正在考虑的对象。问题是当我在其他视图模板上打印时,列表associateBooks似乎仍然为空

更新:即使我删除了条件,它仍然不会在列表中添加任何内容。

1 个答案:

答案 0 :(得分:0)

如果您想保存相关图书清单,也许您想这样做:

  

注意:我建议创建另一个名为book_associated的表。它看起来像这样

+--------+-------------------+
|book_id |associated_book_id |
+--------+-------------------+
|1       |2                  |
|1       |3                  |
+--------+-------------------+
     

这意味着ID为1的图书与ID为23

的图书相关联      

但是,如果Book 1Book 2相关联,则会有缺点,我们无法确定Book 2是否也与Book 1相关联,因为它没有在桌子上宣布。

因此,您的模型应如下所示:

@Entity
@Table(name = "book")
public class Book extends Model {
    @Id
    public Long id;

    // other fields
    ...

    @ManyToMany
    @JoinTable(name="book_associated",
        joinColumns=
        @JoinColumn(name="book_id", referencedColumnName="id"),
        inverseJoinColumns=
        @JoinColumn(name="associated_book_id", referencedColumnName="id")
    )
    public List<Book> associateBooks = new ArrayList<>();

    // other methods and finder
    ...

}

在这里,您可以保存所有图书的相关图书清单。这是关于java的多对多关系的参考:

  1. http://en.wikibooks.org/wiki/Java_Persistence/ManyToMany
  2. http://www.objectdb.com/api/java/jpa/ManyToMany