I have two entity Mail and Attachment. I would like to create a constraint between them but without mapping a relationship.
For example:
class Mail {
@Id
private String id;
...
}
class Attachment {
@Id
// @... constraint with Mail.id ???
private String mailId;
@Id
private String id;
...
}
So this is only a temporary example just to explain. In this case how can I make JPA creates the contraint without to be forced to map Mail inside Attachment?
I don't want to do this:
class Attachment {
@Id
@ManyToOne
private Mail mail;
@Id
private String id;
...
}
JPA creates the constraint and relationship between two entities by the relationship annotation such as @OneToMany or @ManyToOne . Without these annotations , you have to manually enforce the constraint and relationship by yourself.
For example,you can have a factory method on Mail to create an Attachement Implement their constraint in this factory method and ensure that an Attachement can only be created by this method.
public class Mail{
@Id
private String id;
public Attachement createAttachement(){
return new Attachement(id);
}
}
public class Attachement{
@Id
private String id;
@Column(name="mail_id")
private String mailId;
/***************************************************************************
I will put all the domain class in the same package and make the
constructor as package scope to reduce the chance that this
object is created by other class accidentally except Mail class.
**************************************************/
Attachement(String mailId){
this.mailId = mailId;
}
}
Then implement a service class to coordinate all the things about Mail's business use-cases.Client should use this service class to manage mail.For example:
public class MailService{
private EntityManager em;
@Transcational
public void createMailWithAttachement(){
Mail mail = new Mail(xxxx);
em.persist(mail);
Attachement attachement = mail.createAttachement();
em.persist(attachement);
}
@Transcational
public void newAttachmentOnMail(String mailId, XXXXX){
Mail mail = em.find(mailId, Mail.class);
if (mail == null){
throws new ApplicationException("Mail does not exist.Please Check");
}
Attachement attachement = mail.createAttachement();
em.persist(attachement);
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With