单向JPA

单向JPA,jpa,one-to-many,Jpa,One To Many,我有一个数据库(JPA2EclipseLink),其中有订单和项目,每个订单可以有许多项目,每个项目只能分配给一个订单。这是单向关系 订单实体: @Entity public class Order implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private

我有一个数据库(JPA2EclipseLink),其中有订单和项目,每个订单可以有许多项目,每个项目只能分配给一个订单。这是单向关系

订单实体:

@Entity
public class Order implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
}
@Entity
public class Item implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @ManyToOne
    Order o;
}
项目实体有:

@Entity
public class Order implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
}
@Entity
public class Item implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @ManyToOne
    Order o;
}

但如何设置,如果从数据库中删除订单,所有与之相关的项目都将被删除?在单向关系中是否可能,或者我必须创建双向并将@OneToMany(cascade=remove)放入Order实体类中?或者保持其单向性,但拥有方将是订单,并从项目实体中删除对订单的任何引用?

或者按照您在问题中的建议,使关联双向并添加级联,或者明确删除与订单链接的所有项目(使用JPQL delete查询,或搜索然后删除),然后删除订单


在这种情况下,双向关联是有意义的,您可能会在代码中的其他几个地方从中受益。

谢谢,如果我使用双向关系,我是否必须使用@JoinColumn,或者我是否可以在拥有关系的另一端添加mappedBy。如果我声明@Column(name=“ORDER\u ID”)在id字段上,mappedby应该是mappedby=“ORDER\u id”而不是(..)=“id”是吗?我真的不理解joinColumn您必须在ORDER.items上使用
mappedby=“ORDER”
,并保持在Item.ORDER上。
mappedby=“ORDER”
说:查看关联另一侧的字段“ORDER”(即在Item中)要查看此双向关联是如何映射的。这描述得非常好。谢谢!我可以问您@JoinColumn做了什么吗?thank AgainColumn允许告诉您关联是使用联接列映射的。这是多通关联的默认设置。因此您可以使用它来自定义列的名称编辑以保留订单表的外键。就像列一样,如果不使用它,它将使用默认名称。请参阅