我有一个ticket
,应该为其发送邮件,即ticket_mail
。因此,我有实体:
@Entity
public class Ticket {
@Id
@GeneratedValue...
private Integer id;
@ManyToOne(cascade = CascadeType.ALL) // (*1)
@JoinColumn(name = "ticket__mail_id", referencedColumnName = "id")
private TicketMail mailContent;
}
和
@Entity
public class TicketMail {
@Id
@GeneratedValue...
private Integer id;
private String body;
}
主要目的是在不重复内容的情况下多次发送邮件。
我有一个类似Spring-boot的测试方法:
@Test
void checkIfMailContentRemainsTest() {
// Generate a mail content
final TicketMail mail = new TicketMail();
mail.setSubject(Faker.instance().rickAndMorty().character());
final TicketMail content = ticketMailRepro.save(mail); // (*2)
final Ticket ticket1 = new Ticket();
// attach the ticket a ticket
ticket1.setMailContent(content); // (*3)
// save the ticket
final Ticket savedTicket = ticketRepro.save(ticket1);
// generate a second ticket
final Ticket ticket2 = new Ticket();
ticket2.setMailContent(content); // (*3)
ticketRepro.save(ticket2);
}
但这需要手动处理我的ticketMail
。
当我尝试使用(*1)
的{{1}}选项并摆脱cascade
(取消注释)时,将由JPA处理其余部分-因此(*2)
将是(*3)
。但随后我得到.setMailContent(mail)
。
真的需要手动处理嵌套实体吗?我可以使用detached entity passed to persist
机制吗?