Wie einige der Unternehmens-Werte in einer anderen Tabelle speichern Hibernate?
-
24-09-2019 - |
Frage
gibt es eine einfache Möglichkeit, einige der Felder in einer anderen Klasse und Tabelle mit Hibernate zu bestehen.
Zum Beispiel habe ich eine Person
Klasse mit name
, surname
, email
, address1
, address2
, city
, country
Felder aus. Ich möchte, dass meine Klassen sein:
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;
// ..
}
und ich möchte in einem anderen Tisch-Adresse speichern. Was ist der beste Weg, um dies?
zu erreichenEdit: Ich bin mit Anmerkungen. Es muss nicht so sein, wie ich beschrieben habe ich für die besten Praktiken suchen.
Edit 2: Was wird die Id der Adresse sein
PS. Wenn es einen Weg gibt Adresse unveränderbar zu machen (zu Verwendung als Wertobjekt), die noch besser ist, oder vielleicht auch nicht, weil ich alles von falschen Perspektive dachte:)
Lösung 2
Mit Hibernate 3.5 ist es möglich, definieren Fremd Generatoren (aka. JPA-Mapping), Details sind hier .
Es ist ziemlich geradlinig Person
Serializable
implementieren sollten dann @Id
Anmerkung zu person
hinzugefügt wird.
@Entity
@AccessType(value = "field")
@Table(name = "addresses")
public class Address
{
@Id
@OneToOne
@JoinColumn(name = "person_id")
private Person person;
// ...
}
Es gibt eine Alternative, aber ich mag die erste:
@Entity
@AccessType(value = "field")
@Table(name = "addresses")
public class Address
{
@Id
private int personId;
@MapsId
@OneToOne
@JoinColumn(name = "person_id")
private Person person;
// ...
}
Andere Tipps
- Karte
Address
als Einheit und fügen Sie einen Primärschlüssel (ein automatisch generierter id) - Karte, die die Beziehung zwischen
Person
undAddress
alsone-to-one
(@OneToOne
auf jedes Feld)