【发布时间】:2010-01-06 10:29:18
【问题描述】:
我正在尝试将对象添加到客户端视图中的集合中,并使用 hibernate/jpa 机制将其保存在服务器上。
问题来了: 获取一个可以包含 Account 对象的 Group 对象。
在我的客户端视图 (gwt) 上,我创建了一个新组(因此 id 为空),并向该组添加了一些帐户(其中存在 id)。但是这些帐户是在客户端中初始化的,它们的 id 和伪仅通过一个建议框(因为我不想在我的客户端视图中加载密码和其他东西)
当我的组返回服务器时,我尝试使用我的 dao 保存它,但出现此错误: 非空属性引用空值或瞬态值
这是我在 Group 对象中的关联:
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH })
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public Set<Account> getAccounts()
{
return accounts;
}
所以持久化必须自动完成。但我认为问题在于我使用现有 id 的部分帐户对象。
我的问题是:如何添加一个简单的关联(只需在 manyToMany 表中添加一条记录)而不加载我要添加的所有对象(因为我不需要它,我只想添加一个关联两个id)
编辑: 通过示例获取更多信息: 我有一组属性是 编号:“G1” 名称:“组1”
我已经知道了哪些属性的帐户 编号:“A1” 伪:“杰罗姆” 密码:“pass1” 状态:“启用” 生日:“xxx” ...
从我的客户端界面(使用 gwt 完成)我加载 group1 对象 从自动完成中,我加载 Account 对象,但仅使用字段 id 和伪(我不想加载所有对象)。 我将 ID 为“A1”的 Account 对象“Jerome”添加到我的组中。
我将我的组发送到服务器以保存它。 在服务器中,我使用一种事务方法,通过调用来保存组: groupDAO.update(myGroup1)
由于我在此 Group 对象中的 Account 对象已部分加载,因此会导致错误。
那么,如何在不加载整个对象 Account 的情况下添加我的组和帐户之间的关联?我不想要这种代码:
List newList = new ArrayList();
for (Account acc : myGroup1.getAccounts())
{
Account accLoaded = accountDAO.findById(acc.getId());
newList.add(accLoaded);
}
myGroup1.setAccounts(newList);
groupDAO.save(myGroup1);
谢谢
【问题讨论】:
标签: java hibernate gwt jpa many-to-many