Как реализовать эту простую ассоциацию в jpa / hibernate - PullRequest
0 голосов
/ 26 ноября 2011

У меня есть 2 тестовых класса:

Class A{
   B b;
   // some other properties
}

Class B{
   // some properties
}

каждый экземпляр A имеет только один экземпляр класса B, но экземпляр класса B может быть назначен более чем одному экземпляру класса A

вроде:

B b = new B();
A a1 = new A();

a1.setB(b);

A a2 = new A();
a2.setB(b);

что это за тип ассоциации?
Сначала я думал о однонаправленной индивидуальной связи, но, может быть, много-к-одному?но у меня нет коллекции объектов A на B.

Может кто-нибудь объяснить мне, как правильно реализовать эту ассоциацию (используя аннотацию)?

Ответы [ 2 ]

5 голосов
/ 26 ноября 2011

каждый экземпляр A имеет только один экземпляр класса B, но экземпляр класса B может быть назначен более чем одному экземпляру класса A

Итак, от A до Bотношения многие к одному.От B до A это отношение один ко многим.

Ниже показано двунаправленное отображение между A и B с использованием аннотации:

@Entity
@Table(name="tableA")
Class A{

   @ManyToOne
   @JoinColumn(name = "B_ID")
   B b;

   // some other properties

}

@Entity
@Table(name="tableB")
Class B{

   @OneToMany(mappedBy = "b")
   List Set<A> listOfA= new ArrayList<A>();  

  // some other properties
}

Важные моменты:

  • @Entity помечает класс Java как спящий объект.Он сопоставляется с именем таблицы, указанной в @Table

  • Если не указано @Table, по умолчанию он сопоставляется с таблицей с именем, равнымк неквалифицированному названию класса сущности.

  • @ManyToOne определяет отношение класса A к классу B как многие к одному

  • В реляционной базе данных отношение «один ко многим» выражается с использованием следующего ограничения внешнего ключа:

    «Таблица многих сторон» имеет столбец FK, который принимает только PK «таблицы с одной стороной».

    Это имя этого столбца FK может быть явно определено атрибутом name @JoinColumn.Если @JoinColumn не указано, то для этого столбца FK будут использоваться значения по умолчанию, которые объединяются с именами «таблицы с одной стороны», _ (подчеркивание) и именем PK с «одной стороны»Таблица ".

  • @OneToMany определяет отношение класса B к классу A" один-ко-многим ".

1 голос
/ 26 ноября 2011

Отношение:

B (один) --- до -> A (много)

...