0

我有一个 Web 应用程序(使用 Vaadin、Hibernate 和 Postgres 数据库),用户可以在其中向某个表添加数据。当用户向此表中添加项目时,他们被要求输入名称、日期,并从表中选择所有相关产品。当他们单击保存时,我可以将名称和日期保存到数据库中,但是无法从表中抓取项目并将它们放入要添加的集合中。表的 bean 类如下所示:

/** Created by Hibernate **/
public class BeanClass implements Serializable {
    private String name;
    private Date date;
    private Set relatedProducts = new HashSet(0);
    .
    .
    .
    }

我用来保存用户想要添加的项目的代码是:

BeanClass toAdd = new BeanClass();
Set temp = null

/** There is a table where the user can select all the products they want to add 
* When they select an item it goes to another table, so what I am doing here
* is adding looping through latter table and adding all the items they selected
* to a set (supposedly i think this should work
**/
for (Object item : table) {
  temp.add(table.getContainerProperty("id", item));
}

toAdd.setName(nameField.getValue()); //I have input fields for the name and date
toAdd.setDate(dateField.getValue());
toAdd.setRelatedProducts(temp);

hbsession.save(toAdd);

当用户单击保存时,名称和日期会添加到表中,但相关产品不会添加到关系表中(在数据库中)。我已经研究过休眠中的级联和反向,我认为我将不得不使用这些,但不太了解如何使用。

4

1 回答 1

1

您的相关产品集是什么数据类型?如果是另一个 Bean,那么你必须定义一个 OneToMany 注释。

在将 Set 写入数据库之前,您是否调试过 Set 是否已填充?

您实际上并不需要遍历整个表来获取选定的值。您可以通过 table.getValue() 获取选择的项目

获取值()

获取选定的项目 id 或在多选模式下一组选定的 id。

如果表中的数据类型与 Bean 中的数据类型相同,则

toAdd.setRelatedProducts(table.getValue());

应该足够了。

于 2013-08-02T11:37:34.147 回答