java - Hibernate OneToMany 双向不识别外键

标签 java hibernate jpa

我正在从事一个教师项目,我们正在使用 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/

相关文章:

java - vsphere-automation-sdk-java 未经身份验证 - vSphere 6.5

java - 没有 SLF4J 无法构建 Azure 存储 SDK

java - 如何让 hibernate 打印出命名查询有什么问题?

java - 如何随机获得 Material Design 颜色?

java - 在 Selenium 中重用步骤方法

java - Hibernate + Jersey + Jackson 随机获取 “org.hibernate.TransactionException: nested transactions not supported”

java - Struts 2 项目是在 My Eclipse 中构建的,但未部署在 Tomcat 服务器上

hibernate - 使用 Criteriabuilder 查询对 Long 值进行通配符搜索

java - JPA 没有 EntityManager 的持久性提供者

java - 使用复合主键更新 JPA 实体会导致重复输入错误