Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Struts2操作中,通过@OneToMany关系映射两个实体失败_Java_Spring_Jpa_Struts2_Entitymanager - Fatal编程技术网

Java 在Struts2操作中,通过@OneToMany关系映射两个实体失败

Java 在Struts2操作中,通过@OneToMany关系映射两个实体失败,java,spring,jpa,struts2,entitymanager,Java,Spring,Jpa,Struts2,Entitymanager,假设一个产品可以有一个帐户列表,那么产品和帐户之间的关系是@OneToMany。在product类中,我创建了一个Set接口来存储帐户。 接下来,我制作了一个使用Struts 2向产品添加帐户的方法。每次运行此方法时,将重置哈希集,并从中删除对象。在下面,您可以找到DefaultProduct类 @Entity public class DefaultProduct { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Colum

假设一个产品可以有一个帐户列表,那么产品和帐户之间的关系是
@OneToMany
。在product类中,我创建了一个Set接口来存储帐户。 接下来,我制作了一个使用Struts 2向产品添加帐户的方法。每次运行此方法时,将重置
哈希集
,并从中删除对象。在下面,您可以找到
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:

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;
}
公共字符串addAccount(){
Set accounts=new HashSet();
accounts.add(coreService.findAccountById(accountId));
editProduct(新的DefaultProduct(id、帐户));
System.out.println(coreService.findProductById(id.getAccounts().size());//大小检查
回归成功;
}
注意:产品是由
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 
}

非常感谢

对于一对多关联,您必须添加的一件事是级联类型

@OneToMany(fetch = FetchType.LAZY, mappedBy = "product", targetEntity = DefaultAccount.class, cascade = {CascadeType.MERGE})
private final Set<Account> accounts = new HashSet<Account>();
@OneToMany(fetch=FetchType.LAZY,mappedBy=“product”,targetEntity=DefaultAccount.class,cascade={CascadeType.MERGE})
私有最终设置帐户=新HashSet();

您没有向产品中添加帐户。我如何才能做到这一点?产品构造函数获取传递的集合并将其添加到现有集合中。。有什么问题吗?是的,但是你没有创造任何产品。对不起,我在写问题的时候打错了。那么,问题是什么?服务不起作用?感谢您提出的解决方案,但不幸的是,该程序仍然不起作用。由于某些原因,在调用另一个操作方法时,添加的帐户将从产品的哈希集中删除。我已从负责合并对象的服务类中发布了该方法。除此之外,它还可以持久化、删除和查找没有任何问题的对象。如果要持久化,应使用适当的方法。我不想持久化对象。最初,我创建了一个带有无参数构造函数的产品obj,JPA为其生成一个ID并将其存储在db中。然后,我决定向该产品添加帐户,因此我使用该产品的ID找到该产品,然后使用上面的构造函数添加新的帐户集。首先,您保留一个没有帐户的产品,他们添加帐户并更新外键。