Dovrei iniziare dicendo che sono abbastanza nuovo in Java EE e che non ho ancora un forte background teorico in Java.Come lavorare con le interfacce e JPA
Non riesco a capire come utilizzare JPA
insieme a interfaces
in Java. Per illustrare ciò che trovo difficile ho creato un esempio molto semplice.
Se ho due interfacce semplici Person
e Pet
:
public interface Person
{
public Pet getPet();
public void setPet(Pet pet);
}
public interface Pet
{
public String getName();
}
E un'entità PersonEntity
che implementa Person
nonché una PetEntity
che implementa Pet
:
@Entity
public class PersonEntity implements Person
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private PetEntity pet;
@Override
public void setPet(Pet pet)
{
/* How do i solve this? */
}
}
@Entity
public class PetEntity implements Pet
{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
private String name;
/* Getters and Setters omitted */
}
Come faccio a gestire correttamente il caso nel metodo setPet
in cui voglio persistere le relazioni tra le due entità sopra?
Il motivo principale per cui voglio utilizzare le interfacce è perché voglio mantenere le dipendenze tra moduli/livelli nelle interfacce pubbliche. In quale altro modo evito di ottenere una dipendenza da ad es. il mio ManagedBean direttamente a un'entità?
Se qualcuno sconsiglia di utilizzare le interfacce sulle entità, spiegare per favore quali metodi alternativi o modelli esistono.
Sei sicuro che funzionerà? Stai utilizzando l'accesso al campo implicito, ma imposta l'annotazione '@ OneToOne' sul setter. Inoltre, anche con l'accesso alla proprietà, questa annotazione funzionerà? Non dovrebbe essere su getter piuttosto che setter? –
Mairbek, e per quanto riguarda il campo di miscelazione e l'accesso alla proprietà? Pensi che questa parte della specifica JPA 2.0 sia rilevante in questo caso: * "Il comportamento delle applicazioni che mescolano il posizionamento di annotazioni su campi e proprietà all'interno di una gerarchia di entità senza specificare esplicitamente l'annotazione di Access non è definito." *? –
Funziona finché c'è solo 1 implementazione di Persona, naturalmente. Quando ne hai più di 1, avresti bisogno di supporto esplicito nell'implementazione per i campi dell'interfaccia – user383680