这感觉好像已经有了答案,但我已经浏览了各种各样的帖子,仍然在挣扎。
我正在学习如何将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);
1条答案
按热度按时间fwzugrvs1#
要将新的emailaddress实体添加到您的客户实体,您只需调用findbyid或其他findspring数据方法,然后创建一个新的emailaddress示例以附加到客户实体上的emailaddress集合。如果你在这里发布一些stacktrace异常,那就太好了,我们可以提供更多帮助!