2010-05-21 2 views
-1

Я создал две таблицы как личность и адрес, используя JPA. Я хочу дать отношение «один ко многим» между этими таблицами. Если я даю следующиеJPA отношение

@OneToMany(mappedBy="address",targetEntity=person.class,fetch=FetchType.EAGER) 

в адресной таблице означает, что он работает неправильно. Может кто-нибудь мне помочь?

Заранее спасибо.

+0

Немного больше информации необходимо. Покажите фрагмент вашего класса Person, в котором вы объявили адрес и фрагмент класса адресов, в котором вы указали список Person. –

+0

Что не написано правильно? Также, пожалуйста, покажите свои сущности. –

+0

Почти невозможно сказать что-либо с таким маленьким описанием. – brandizzi

ответ

0

Не зная ничего о вашей архитектуре, я догадаюсь, что вам нужно.

JPA достаточно умен, чтобы знать, как присоединиться к вашим столам, поэтому, если у вас есть идентификатор в обеих таблицах, вам фактически не нужно иметь «mappedBy» и «targetEntity».

Вам просто нужно аннотировать свой класс следующим образом: (при условии, что ваши отношения - это один адрес, у которого много людей).

В классе Адреса:

@OneToMany 
@JoinColumn(name="address_id") 
public List<Person> getPeople() 
{ 
    return people; 
} 

Это место address_id как поле в вашем лице таблицу, представляющее их соответствующий адрес. Поскольку вы объявляете свой список типов Person JPA будет знать, чтобы сопоставить таблицу person (до тех пор, пока класс Person аннотируется правильно с @Entity).

+1

Если ассоциация двунаправлена, вам определенно нужно «mappedBy» (или это приведет к двум однонаправленным ассоциациям). –

+0

@Pascal Thivent, просто сделал предположение, что он был однонаправленным на основе нулевой информации, предоставленной OP. Если вы используете двунаправленный адрес, вы также должны иметь аннотированный адрес в классе лица и все другие требования ... – kgrad

0

это пример

@ElementCollection 
@CollectionTable(name = "NUMBER") 
private List<String> number; 
+0

Не могли бы вы добавить дополнительные пояснения? –

Смежные вопросы