Comment stocker une partie des valeurs de l'entité dans une autre table à l'aide mise en veille prolongée?

StackOverflow https://stackoverflow.com/questions/2585537

  •  24-09-2019
  •  | 
  •  

Question

est-il un moyen simple de persister quelques-uns des champs dans un autre en utilisant la classe et une table mise en veille prolongée.

Par exemple, j'ai une classe Person avec name, surname, email, address1, address2, city, champs country. Je veux que mes classes à:

public class Person
{
   private String name;
   private String surname;
   private String email;
   private Address address;
   // ..
}

public class Address
{
   private Person person; // to whom this belongs
   private String address1;
   private String address2;
   private String city;
   private String country;
   // ..
}

et je veux stocker Adresse dans une autre table. Quelle est la meilleure façon d'y parvenir?

Modifier J'utilise des annotations. Il ne doit pas être la façon dont je l'ai décrit, je cherche les meilleures pratiques.

Edit 2: Quel sera l'ID d'adresse

PS. S'il y a un moyen de rendre Adresse immuable (à utiliser comme objet de valeur) qui est encore mieux, ou peut-être pas parce que je pensais tout de fausse perspective:)

Était-ce utile?

La solution 2

Avec Hibernate 3.5, il est possible de définir générateurs étrangers (aka. Cartographie JPA), les détails sont ici .

Il est assez simple Person devrait mettre en œuvre Serializable puis annotation @Id est ajouté à person.

@Entity
@AccessType(value = "field")
@Table(name = "addresses")
public class Address
{
   @Id
   @OneToOne
   @JoinColumn(name = "person_id")
   private Person person;
   // ...
}

Il y a une alternative, mais je vraiment comme le premier:

@Entity
@AccessType(value = "field")
@Table(name = "addresses")
public class Address
{
   @Id
   private int personId;

   @MapsId
   @OneToOne
   @JoinColumn(name = "person_id")
   private Person person;
   // ...
}

Autres conseils

  1. carte Address comme une entité et ajouter une clé primaire (un identifiant généré automatiquement)
  2. cartographier la relation entre Person et Address comme one-to-one (@OneToOne sur chaque champ)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top