springjpa向子表添加额外的条目

enxuqcxy  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(293)

这感觉好像已经有了答案,但我已经浏览了各种各样的帖子,仍然在挣扎。
我正在学习如何将jpa与springboot结合使用,并专门致力于理解一对多关系。目前的问题是我有一个客户实体,客户可能有多个与之相关联的电子邮件地址,因此我们可以联系客户的多个人员。这给了我这些模型:

@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;

}

然后我有了emailaddress模型:

@AllArgsConstructor
@NoArgsConstructor
@Data
@ToString
@Entity
@Table(name = "e_mail_address")
public class EMailAddress {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    private String emailAddress;

}

这是我的客户地址:

public interface CustomerRepository extends JpaRepository<Customer, Integer> {
}

现在,我可以添加一个客户,并拥有与该客户关联的电子邮件地址:

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);

很高兴被加入数据库。
问题是,如果我想给那个客户添加另一个电子邮件地址,我该怎么做?我曾尝试使用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);
fwzugrvs

fwzugrvs1#

要将新的emailaddress实体添加到您的客户实体,您只需调用findbyid或其他findspring数据方法,然后创建一个新的emailaddress示例以附加到客户实体上的emailaddress集合。如果你在这里发布一些stacktrace异常,那就太好了,我们可以提供更多帮助!

// will retrieve your customer entity
Customer customer = customerRepository.getOne(10)

// get email collection and add new EmailAddress instance
customer.getEmailAddresses().add(new EmailAddress(10,"email@teste.com")

// save and flush email data on table
customerRepository.saveAndFlush(customer);

相关问题