我想添加一个对象到我的客户端视图中的集合,并使用hibernate/jpa机制将其保存在服务器上。如何简单地添加一个对象到客户端的休眠集合
问题出在这里: 取一个可以包含Account对象的Group对象。
在我的客户端视图(gwt)上,我创建了一个新组(因此id为空),并向此组添加了一些帐户(其中存在id)。但这些帐户初始化在客户端与他们的ID和伪仅通过一个建议框(因为我不想在我的客户端视图中加载密码和其他东西)
当我的小组返回到服务器,我尝试保存它与我的道,我已经得到了这个错误: 非空属性引用null或瞬时值
这是我在组对象关联:
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH })
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public Set<Account> getAccounts()
{
return accounts;
}
所以坚持必须自动完成。但我认为问题在于我使用具有现有ID的部分帐户对象。
我的问题是:如何添加一个简单的关联(只需在manyToMany表中添加一条记录)而不加载所有我想添加的对象(因为我不需要它,我只是想添加一个关联两者之间的ID)
编辑:举例 更多信息: 我有一组属性 ID:“G1” 名称:“1组”
我有哪些属性的帐户是 id:“A1” pseudo:“jerome” 密码:“pass1” 个状态:“已启用” 生日:“XXXX” ...
从我的客户端界面(GWT的完成)我加载组1对象 从autcompletion我加载客户对象,但只有域ID和伪(我不想加载所有的对象)。 我将ID为“A1”的Account对象“Jerome”添加到我的组中。
我将我的组发送到服务器进行保存。 在服务器我使用的通过调用保存组一个事务性方法: groupDAO.update(MyGroup1的)
如在该组对象我的账户对象被部分地加载时,它会导致错误。
那么,如何在不加载整个对象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);
感谢
哇!正是我想要的! 非常感谢! – 2010-01-07 08:22:08
+1,完美答案 – whiskeysierra 2010-01-10 19:50:15