【发布时间】:2014-07-26 10:28:13
【问题描述】:
假设一个产品可以有一个账户列表,产品和账户的关系是@OneToMany。在产品类中,我创建了一个 Set 接口来存储帐户。
接下来,我制作了一个使用 Struts 2 向产品添加帐户的方法。每次我运行这个方法时,HashSet 被重置并从中删除对象。在下面,您可以找到 DefaultProduct 类。
@Entity
public class DefaultProduct {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", nullable = false)
Long id;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "product", targetEntity = DefaultAccount.class)
private final Set<Account> accounts = new HashSet<Account>();
public DefaultProduct(Long id, Set<Account> accounts) {
Assert.notEmpty(accounts);
this.accounts.addAll(accounts);
}
// Getters
}
Struts 2 action 方法从service 类调用editProduct() 方法,该类是使用Spring 框架注入的依赖项。 service 类没有任何问题,因为它已经过准确测试。您可以在下面找到来自 service 类和 Struts 2 的方法。
服务:
@Transactional
public void editProduct(Product product) {
entityManager.merge(product);
}
支柱 2:
public String addAccount(){
Set<Account> accounts = new HashSet<Account>();
accounts.add(coreService.findAccountById(accountId));
coreService.editProduct(new DefaultProduct(id, accounts));
System.out.println(coreService.findProductById(id).getAccounts().size()); //Size-check
return SUCCESS;
}
注意:Product是DefaultProduct类实现的接口。
非常感谢
【问题讨论】:
-
您没有向产品添加帐户。
-
我该怎么做?产品构造函数接受传递的 Set 并将其添加到现有的.. 有什么问题吗?
-
是的,但您没有创建任何产品。
-
Roman 抱歉,我在写问题时打错字了。
-
那么,问题出在哪里?服务没用?
标签: java spring jpa struts2 entitymanager