JPA:级联导致传递的独立实体继续存在

时间:2019-11-28 12:29:16

标签: java hibernate spring-boot spring-data-jpa

我有一个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机制吗?

0 个答案:

没有答案