Supposons qu'un produit puisse avoir une liste de comptes, la relation entre le produit et le compte est @OneToMany
. Dans la classe de produit, j'ai créé une interface Set pour stocker des comptes. Ensuite, j'ai fait une méthode utilisant Struts 2 pour ajouter des comptes à un produit. Chaque fois que j'exécute cette méthode, le HashSet
est réinitialisé et les objets en sont supprimés. Ci-dessous, vous pouvez trouver la classe DefaultProduct
.Le mappage de deux entités via la relation @OneToMany échoue dans l'action Struts2
@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
}
La méthode Struts 2 d'action appelle la méthode editProduct()
de la classe service
, qui est la dépendance à l'aide Injecté framework Spring. La classe service
n'a aucun problème car cela a été testé avec précision. Ci-dessous vous trouverez des méthodes de service
classe et Struts 2.
Service:
@Transactional
public void editProduct(Product product) {
entityManager.merge(product);
}
Struts 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;
}
Note: Le produit est une interface implémentée par DefaultProduct
classe.
Un grand merci
Vous n'ajoutez pas de compte à un produit. –
Comment puis-je le faire Roman? Le constructeur du produit prend l'ensemble passé et l'ajoute à celui existant. Y at-il quelque chose de mal? –
oui, mais vous ne créez aucun produit. –