Comment stocker une partie des valeurs de l'entité dans une autre table à l'aide mise en veille prolongée?
-
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:)
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
- carte
Address
comme une entité et ajouter une clé primaire (un identifiant généré automatiquement) - cartographier la relation entre
Person
etAddress
commeone-to-one
(@OneToOne
sur chaque champ)