2016-03-12 2 views
-1

Я пытаюсь создать объект следующим образомJPA onetomany на той же сущности

@Data 
    public class Person 
    { 
    @Id 
    private String id; 

@OneToMany(mappedBy="id") 
private List<person> friends; 
    } 

Позволить JPA создать объект и я могу оставаться человеком с друзьями утратившим

при попытке сохранить новый человек с включенным списком друзей, отношение не видно в СУРБД и не бросает никаких ошибок при сохранении.

Невозможно выяснить, действительно ли данные друзей хранятся? Если да, то как получить к нему доступ?

+1

mappedBy, как предполагается, чтобы указать на поле другого типа типа лица. Это не так. Предложите, чтобы вы пошли и прочитали документацию JPA. –

+0

Спасибо, что указали это :-) Учитывая ваш глубокий «опыт» в JPA, вы могли бы сообщить мне, как отображать вышеуказанное отношение? Заранее спасибо ! –

+1

Вам посоветовали посмотреть документацию JPA. Любая документация JPA расскажет вам, как сопоставить двунаправленное отношение 1-N. Например, http://www.datanucleus.org/products/accessplatform_4_2/jpa/orm/one_to_many_collection.html#fk_bi Почему так трудно найти? –

ответ

0

Предполагая, что у вас есть две таблицы, Person и Person_Friends. Person класс выглядит, как показано ниже:

ПРИМЕЧАНИЕ: Для того, чтобы сохранить его простым, я использовал IDENTITY в GenerationType и int как тип данных для id.

@Entity 
class Person 
{ 
    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private int id; 

    @OneToMany(cascade=CascadeType.ALL) 
    @JoinTable(name="Person_Friends") 
    List<Person> friends = new ArrayList<>(); 

    @Override 
    public String toString() { 
     return "Person [id=" + id + ", friends=" + friends + "]"; 
    } 
} 

Код для сохранения образца Person объекта с friends:

entityManager.getTransaction().begin(); 
Person p = new Person(); 
p.friends.add(new Person()); 
p.friends.add(new Person()); 
p.friends.add(new Person()); 
p.friends.add(new Person()); 
entityManager.persist(p); 
entityManager.getTransaction().commit(); 

не в состоянии выяснить, как данные друг на самом деле получить хранящуюся?

С помощью этой схемы вы сможете найти данные для друзей в таблице Person_Friends.

Если да, то как получить к нему доступ?

Загрузка Person объекта, для которого вы хотите просмотреть друг данные должны заполнить friends список, а хотя лениво для этого отображения.

В случае, если вы хотите увидеть таблицы автоматически сгенерированные, используемые здесь, в DDLS ниже:

create table Person (
     id integer generated by default as identity, 
     primary key (id) 
    ) 

    create table Person_Friends (
     Person_id integer not null, 
     friends_id integer not null 
    ) 

    alter table Person_Friends 
     add constraint UK_4ehyhs34ebu5gl6k8u5ckd2u7 unique (friends_id) 

    alter table Person_Friends 
     add constraint FKjvrny03ut8h70garyw5ehnlr7 
     foreign key (friends_id) 
     references Person 

    alter table Person_Friends 
     add constraint FK85ngln3801hk33fkhhsl7b8e7 
     foreign key (Person_id) 
     references Person 
+0

Этот код, похоже, является API-интерфейсом Hibernate, а не JPA API, но вопрос не содержит JPA API. Возможно, вы должны изменить его, чтобы отразить вопрос? –

+0

@BillyFrost Это хорошая проблема, поскольку заголовок вопроса указывает на то, что OP интересуется JPA. Обновлен ответ. –

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