Ho due classi che desidero collegare tra loro in un'applicazione JEE usando JPA2. In un mondo OO, direi che una Chatroom ha un attributo Elenco messaggi. Nel mondo relazionale la composizione non esiste in questo modo. Se non stessi coinvolgendo un database, sicuramente codificherei queste due cose come una composizione dei messaggi all'interno della Chatroom. Ma dal momento che sto usando ORM con la specifica JPA2 ho deciso di provare a creare gli oggetti @Entity come scritto di seguito con il fatto che verranno mappati al database in mente.
La mia domanda è: dovrei farlo? È appropriato suddividere le classi @Entity per supportare quello che sembra l'approccio più relazionale? O dovrei semplicemente progettare da una prospettiva OO e cercare di ignorare il fatto che esiste un ORM che lo guida dal basso? In questo momento sto guidando il mio progetto dal lato del database, ma dovrei farlo in un altro modo? Ci sono implicazioni che mi mancano nel farlo in questo modo?
package org.janp.castlerock;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Chatroom {
private String name;
@Id
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
package org.janp.castlerock;
import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
public class Message {
private int id;
private Chatroom chatroom;
private Date timestamp;
private String text;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Temporal(TemporalType.TIMESTAMP)
public Date getTimestamp() {
return timestamp;
}
public void setTimestamp(Date timestamp) {
this.timestamp = timestamp;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
@ManyToOne
@JoinColumn(name="name")
public Chatroom getChatroom() {
return chatroom;
}
public void setChatroom(Chatroom chatroom) {
this.chatroom = chatroom;
}
}