java字段映射替换框架一对多_java-双向一对一映射到多个字段

我有一个称为Flight的域类,它代表已经飞行的航班.我还有一个称为“运动”的类,它可以表示出发或到达,并包含日期和时间以及发生运动的机场.

@Entity

public class Flight implements Serializable {

private Movement departure;

private Movement arrival;

}

@Entity

public class Movement implements Serializable {

@Temporal(TemporalType.TIMESTAMP)

private Date dateTime;

@ManyToOne

private Airport airport;

private Flight flight;

}

但是,我不确定如何在Movement类中正确注释飞行场.我认为Flight类必须是关系的所有者,因为如果不是,则无法确定特定Flight的运动是出发还是到达:

@OneToOne

private Movement departure;

@OneToOne

private Movement arrival;

然而,这带来了问题.我无法在两个字段上的“运动”类中映射飞行字段:

// This obviously does not work

@OneToOne(mappedBy = "departure")

@OneToOne(mappedBy = "arrival")

private Flight flight;

我如何正确地对此进行注释,使出发和到达字段都正确引用运动,并且仍然能够使Movement类上的Flight字段引用Flight类?

解决方法:

如果您确实需要双向关系,则需要移动字段,其中之一始终为空:

@OneToOne(mappedBy = "departure")

private Flight departureFlight;

@OneToOne(mappedBy = "arrival")

private Flight arrivalFlight;

但是您可能只有一个吸气剂:

public Flight getFlight() {

return departureFlight == null ? arrivalFlight : departureFlight;

}

标签:jpa,java,java-ee

来源: https://codeday.me/bug/20191207/2087196.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值