Spring JPA一对多

时间:2016-10-13 22:31:41

标签: spring-boot spring-data-jpa mapping entity

我有两个实体:

@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?

1 个答案:

答案 0 :(得分:1)

是的,如果您在代码中使用它,则需要添加 payment.registration @ManyToOne关系。

考虑到JPA允许您将SQL数据库模型映射到面向对象的模型。在对象和数据库之间建立映射后,始终在对象级别工作。这就是为什么,虽然您在数据库中有关系,但您的Payment对象除非您将其映射到属性,否则不会知道任何关于它的信息。

当然,当您使用数据模型对象或执行JPQL或Criteria查询时,它适用。如果使用本机查询,则可以按原样访问数据库模型。