我有两个实体:
@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
但不是
为什么?我需要一个关系oneToMany bidirectionnal?payment.registration
答案 0 :(得分:1)
是的,如果您在代码中使用它,则需要添加 payment.registration @ManyToOne关系。
考虑到JPA允许您将SQL数据库模型映射到面向对象的模型。在对象和数据库之间建立映射后,始终在对象级别工作。这就是为什么,虽然您在数据库中有关系,但您的Payment对象除非您将其映射到属性,否则不会知道任何关于它的信息。
当然,当您使用数据模型对象或执行JPQL或Criteria查询时,它适用。如果使用本机查询,则可以按原样访问数据库模型。