Java ElementCollection è considerato una cattiva pratica?

1

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?

    
posta IAE 05.11.2013 - 12:07
fonte

1 risposta

2

Ho avuto un caso semplice con la prima soluzione di un enum che è stato memorizzato in ElementCollection . Basterebbe nella tua situazione perché molto probabilmente dovresti solo interrogare l'intera collezione e poi puoi fare le tue operazioni su Set . Se invece vuoi che le tue scelte siano più estensibili, devi creare un'altra Entità per DownloadFilePreferences .

ome best practices suggest to never have a class without a primary key

Solo perché non hai dichiarato un primario non significa che l'implementazione JPA non crei un id nella tabella di mapping.

    
risposta data 05.11.2013 - 12:38
fonte

Leggi altre domande sui tag