2016-10-13 10 views
0

У меня есть две сущности:Spring JPA один ко многим

@Entity 
@Table(name="Registration") 
public class Registration{ 

    @Id 
    private UUID uuid; 

    @OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE}, fetch = FetchType.LAZY) 
    @JoinColumn(name="registration", nullable = false) 
    private List<Payment> payment; 
} 


@Entity 
@Table(name="Payment") 
public class Payment { 

    @Id 
    private UUID uuid; 

    /*@ManyToOne(targetEntity = Registration.class) <-- MappingException: Repeated column in mapping for entity 
    private Registration registration;*/ 
} 

Эти объекты создают две таблицы:

TABLE `registration` (
`uuid` binary(16) NOT NULL, 
PRIMARY KEY (`uuid`)) 

TABLE `payment` (
`uuid` binary(16) NOT NULL, 
`registration` binary(16) NOT NULL, 
PRIMARY KEY (`uuid`), 
CONSTRAINT `FK_jgemihcy9uethvoe3l7mx2bih` FOREIGN KEY (`registration`)   REFERENCES `registration` (`uuid`)) 

Я использую Rest Service. Я могу получить доступ к

registration.payment

но не

payment.registration

почему? Мне нужно отношение oneToMany bidirectionnal?

+0

С вашего определения сущности, нет никакой связи между платежами и регистрацией на самом деле, что вы действительно хотите? –

+0

Это ошибка от меня. Я использую контроллер с сервисом rest для доступа к объекту json. Я не могу получить доступ: payment.registration. Каков наилучший способ, пожалуйста? – Mezoo

+1

Да, вы должны добавить 'ManyToOne' для регистрации здесь. –

ответ

1

Да, вам необходимо добавить payment.registration @ManyToOne отношения, если вы используете его в своем коде.

Учтите, что JPA позволяет сопоставить модель базы данных SQL с объектно-ориентированной. Когда у вас есть сопоставление между вашими объектами и вашей базой данных, вы всегда работаете на уровне объекта. Вот почему, хотя у вас есть отношения в базе данных, ваш объект Payment ничего об этом не знает, если вы не сопоставляете его с атрибутом.

Конечно, это применимо, когда вы используете объекты модели данных или выполняете запросы JPQL или Criteria. Если вы используете собственные запросы, у вас есть доступ к модели базы данных, какой она есть.

+0

Добавить @ManyToOne return: 'org.hibernate.MappingException: Повторяющийся столбец в сопоставлении для объекта:' Столбцы оплаты: регистрация (должна быть сопоставлена ​​с insert = "false" update = "false") ' – Mezoo

+0

Вам нужно добавить атрибут _mappedBy_ в аннотации _ @ OneToMany_, чтобы сделать отношения двунаправленными. –

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