我正在从事一个教师项目,我们正在使用 JPA 作为数据库。但是,我陷入了这种一对多关系。我正在尝试使 Waiter 引用多个 GuestOrders 和 GuestOrders 并引用 Waiter 但到目前为止没有成功。
- Waiter 拥有许多 GuestOrders
- 许多 GuestOrders 属于一个 Waiter
服务员
@Entity
@Table(name = "waiter")
@PrimaryKeyJoinColumn(name = "USER_ID")
@DiscriminatorValue("W")
public class Waiter extends Worker {
@OneToMany(mappedBy="waiter", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private Collection<GuestOrder> activeGuestOrders;
public Waiter() {
this.activeGuestOrders = new ArrayList<>();
}
public Waiter(String email, String password, String name, String surname,
Date bithday, int shoeSize, int dressSize, Role role) {
super(email, password, name, surname, bithday, shoeSize, dressSize, role);
this.activeGuestOrders = new ArrayList<>();
}
public Collection<GuestOrder> getActiveGuestOrders() {
return activeGuestOrders;
}
public void setActiveGuestOrders(Collection<GuestOrder> guestOrders) {
this.activeGuestOrders = guestOrders;
}
public void addActiveOrder(String newOrder){
GuestOrder newOne = new GuestOrder(newOrder);
this.activeGuestOrders.add(newOne);
}
public void addActiveOrder(GuestOrder newGuestOrder){
this.activeGuestOrders.add(newGuestOrder);
}
}
客人订单
@Entity
public class GuestOrder {
@GeneratedValue
@Id
private long order_id;
@Column
private String orders;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="user_id")
private Waiter waiter;
public Waiter getWaiter() {
return waiter;
}
public void setWaiter(Waiter waiter) {
waiter = waiter;
}
public GuestOrder() {}
public GuestOrder(String name){
this.orders = name;
}
}
发生添加的部分代码:
Waiter newWork = new Waiter(email, password, name, surname, bithday, shoeSize, dressSize,new Role(role));
newWork.addActiveOrder("Order1");
newWork.addActiveOrder("Order2");
repository.flush();
return repository.save(newWork);
我最终的状态是: GuestOrder Table Waiter Table
*抱歉图片太小。
我已经尝试了我设法通过谷歌找到的所有其他解决方案,但它没有帮助我。
最佳答案
如果你想在@OneToMany 上使用级联来完成这项工作,那么你必须在关系的两边设置依赖关系:
Waiter newWork = new Waiter(email, password, name, surname, bithday, shoeSize, dressSize,new Role(role));
GuestOrder order1 = new GuestOrder();
GuestOrder order2 = new GuestOrder();
order1.setWaiter(newWork);
order2.setWaiter(newWork);
newWork.addActiveOrder(order1);
newWork.addActiveOrder(order2);
repository.flush();
return repository.save(newWork);
否则持久化提供者不会认为这个关系是完全配置的。
关于java - Hibernate OneToMany 双向不识别外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44156087/