Da quanto ho capito, un ElementCollection non ha una chiave primaria, è incorporato nella classe e non può essere interrogato. Sembra abbastanza strong, ma mi permette di scrivere una classe enum che aiuta anche l'internazionalizzazione (usando la chiave enum per la ricerca nel mio ResourceBundle).
Esempio: Abbiamo un utente su un sito multimediale e può scegliere in quale formato scarica i file
@Entity@Table(name="user")
public class User {
/* snip other fields */
@Enumerated
@ElementCollection(
targetClass = DownloadFilePreference.class,
fetch = FetchType.EAGER
)
@CollectionTable(name = "download_file_preference",
joinColumns = @JoinColumn(name = "user_id")
)
@Column(name = "name")
private Set<DownloadFilePreference> downloadFilePreferences = new HashSet<>();
}
public enum DownloadFilePreference {
MP3, WAV, AIF, OGG;
}
Questo mi sembra molto bello, e suppongo che dipenda da "dipende dal tuo caso d'uso", ma so anche che sono francamente solo un iniziato quando si tratta di design di database. Alcune buone pratiche suggeriscono di non avere mai una classe senza una chiave primaria, anche in questo caso? Inoltre non sembra molto estendibile, dovrei usare questo e scommettere sulla possibilità che non avrò mai bisogno di interrogare su FilePreferences?