Как сохранить некоторые значения объекта в другой таблице, используя Hibernate? - PullRequest
0 голосов
/ 06 апреля 2010

есть простой способ сохранить некоторые поля в другом классе и таблице, используя hibernate.

Например, у меня есть класс Person с полями name, surname, email, address1, address2, city, country. Я хочу, чтобы мои уроки были:

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;
   // ..
}

и я хочу сохранить Адрес в другой таблице. Каков наилучший способ добиться этого?

Редактировать: Я использую аннотации. Это не должно быть так, как я описал, я ищу лучшие практики.

Редактировать 2: Каким будет идентификатор адреса?

PS. Если есть способ сделать Address неизменным (для использования в качестве объекта-значения), это даже лучше, или, может быть, нет, потому что я думал все с неправильной точки зрения:)

Ответы [ 2 ]

1 голос
/ 06 апреля 2010
  1. сопоставить Address как сущность и добавить первичный ключ (автоматически сгенерированный идентификатор)
  2. отобразить соотношение между Person и Address как one-to-one (@OneToOne в каждом поле)
0 голосов
/ 08 апреля 2010

В Hibernate 3.5 можно определить сторонние генераторы (он же JPA-отображение), детали: здесь .

Это довольно просто Personследует реализовать Serializable, затем к person добавляется аннотация @Id.

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

Существует альтернатива, но мне действительно нравится первая:

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

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