Java Spring JPA向子表添加其他条目

Java Spring JPA向子表添加其他条目,java,spring,spring-boot,jpa,one-to-many,Java,Spring,Spring Boot,Jpa,One To Many,这感觉好像已经有了答案,但我已经浏览了所有的帖子,仍然在努力 我正在学习如何将JPA与Spring Boot结合使用,并专门致力于理解一对多关系。目前的问题是,我有一个客户实体,客户可能有多个与其关联的电子邮件地址,因此我们可以联系客户的多个人员。这给了我这些模型: @AllArgsConstructor @NoArgsConstructor @Data @ToString @Entity @Table(name = "customer") public class Cust

这感觉好像已经有了答案,但我已经浏览了所有的帖子,仍然在努力

我正在学习如何将JPA与Spring Boot结合使用,并专门致力于理解一对多关系。目前的问题是,我有一个客户实体,客户可能有多个与其关联的电子邮件地址,因此我们可以联系客户的多个人员。这给了我这些模型:

@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
@Entity
@Table(name = "customer")
public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String customerName;
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    @LazyCollection(LazyCollectionOption.FALSE)
    @JoinColumn(name = "email_address_id")
    private List<EMailAddress> emailAddress = new ArrayList<>();
    private int brandId;
    private boolean shipmentReport;
    private boolean salesReport;
    
}
这是我的客户地址:

public interface CustomerRepository extends JpaRepository<Customer, Integer> {
}
公共接口CustomerRepository扩展了JpaRepository{
}
现在,我可以添加一个客户,并拥有与该客户关联的电子邮件地址:

    List<EMailAddress> eMailAddresses = new ArrayList<>();
    EMailAddress eMailAddress = new EMailAddress();
    eMailAddress.setEmailAddress("someemail@gmail.com");

    eMailAddresses.add(eMailAddress);

    Customer customer = new Customer();
    customer.setCustomerName("Company A");
    customer.setBrandId(1);
    customer.setSalesReport(false);
    customer.setShipmentReport(true);
    customer.setEmailAddress(eMailAddresses);

    repo.save(customer);
List eMailAddresses=new ArrayList();
EMailAddress EMailAddress=新的EMailAddress();
eMailAddress.setEmailAddress(“someemail@gmail.com");
eMailAddress.add(eMailAddress);
客户=新客户();
customer.setCustomerName(“A公司”);
客户。setBrandId(1);
客户报告(假);
customer.setShipmentReport(真实);
customer.setEmailAddress(电子邮件地址);
回购保存(客户);
这很高兴地被添加到数据库中

问题是,如果我想向该客户添加另一个电子邮件地址,我将如何做?我曾尝试使用getOne从存储库中检索客户,然后获取当前电子邮件地址并添加到其中,但如果我随后尝试保存该客户,则会得到同一实体错误的多个表示形式

我想也许我需要添加一个电子邮件地址存储库,然后通过该存储库添加新条目(假设我可以获得电子邮件地址id),但我在这方面也画了一个空白

感谢您的指导


这就是我迄今为止尝试添加新电子邮件的方式:

    Customer tempCustomer = repo.getOne(1);

    List<EMailAddress> curentEmails = tempCustomer.getEmailAddress();

    eMailAddress.setEmailAddress("anotheremail@gmail.com");
    curentEmails.add(eMailAddress);
    eMailAddress.setEmailAddress("athirdemail@yahoo.co.uk");
    curentEmails.add(eMailAddress);

    tempCustomer.setEmailAddress(curentEmails);
    repo.save(tempCustomer);
Customer tempcuster=repo.getOne(1);
List curentEmails=tempcuster.getEmailAddress();
eMailAddress.setEmailAddress(“anotheremail@gmail.com");
curentEmails.add(eMailAddress);
eMailAddress.setEmailAddress(“athirdemail@yahoo.co.uk");
curentEmails.add(eMailAddress);
tempcuster.setEmailAddress(curentEmails);
回购保存(临时客户);

要将新的EmailAddress实体添加到您的客户实体中,您只需调用findById或其他find spring数据方法,然后创建一个新的EmailAddress实例以附加到客户实体上的EmailAddress集合中。如果您在这里发布一些stacktrace异常,那将非常好,我们可以提供更多帮助

//将检索您的客户实体
Customer=customerRepository.getOne(10)
//获取电子邮件集合并添加新的EmailAddress实例
customer.getEmailAddresses().add(新的电子邮件地址(10,)email@teste.com")
//在表上保存和刷新电子邮件数据
customerRepository.saveAndFlush(客户);

您是否可以在实际尝试向
客户添加新的
电子邮件地址的地方共享代码?谢谢,我已将其添加到问题中。太棒了-非常感谢!
    Customer tempCustomer = repo.getOne(1);

    List<EMailAddress> curentEmails = tempCustomer.getEmailAddress();

    eMailAddress.setEmailAddress("anotheremail@gmail.com");
    curentEmails.add(eMailAddress);
    eMailAddress.setEmailAddress("athirdemail@yahoo.co.uk");
    curentEmails.add(eMailAddress);

    tempCustomer.setEmailAddress(curentEmails);
    repo.save(tempCustomer);