Java JPA@OneToMany需要回报@manytone吗?

Java JPA@OneToMany需要回报@manytone吗?,java,orm,jpa,persistence,Java,Orm,Jpa,Persistence,考虑到我已经使用上面的SQL语句创建了两个表,并且我想为它们创建实体类,对于类B,我有以下成员属性: Create Table A ( ID varchar(8), Primary Key(ID) ); Create Table B ( ID varchar(8), A_ID varchar(8), Primary Key(ID), Foreign Key(A_ID) References A(ID) ); 在课堂A中,我是否需要对多对一关系进行回报 @Id @Column(name = "

考虑到我已经使用上面的SQL语句创建了两个表,并且我想为它们创建
实体
类,对于类
B
,我有以下成员属性:

Create Table A (
ID varchar(8),
Primary Key(ID)
);

Create Table B (
ID varchar(8),
A_ID varchar(8),
Primary Key(ID),
Foreign Key(A_ID) References A(ID)
);
在课堂
A
中,我是否需要对多对一关系进行回报

@Id
@Column(name = "ID", nullable = false, length = 8)
private String id;
@JoinColumn(name = "A_ID", referencedColumnName = "ID", nullable = false)
@ManyToOne(optional = false)
private A AId;
@Id
@列(name=“ID”,null=false,长度=8)
私有字符串id;
@OneToMany(cascade=CascadeType.ALL,mappedBy=“AId”)
私人名单//
为“许多人”设立一个互惠的“一人公司”是必要的还是好主意

不,这根本不是强制性的,这是一个纯粹的设计决策。整个问题是。。。您是否希望这样(即单向关联):

或者这个(即双向关联):

如果不需要从A获取Bs,则可以跳过一侧的
Bs
属性和
OneToMany

如果我现在做出了省略@OneToMany注释属性的设计决定,它会再次咬我一口


不,如果您发现需要,可以稍后添加。

它们是可选的。如果不想使用它们,则无需将它们添加到模型中


我建议根本不要使用反向映射,因为这样的集合可能会变得非常大,而且大多数持久层处理这些集合的能力都不太好。在许多情况下,您必须自己处理与这些集合相关的已加载/管理实体的添加/删除。因此,只有当它们真的让你更容易时才添加它们。

当然不会。这是一对两方向关系之间的设计决策。在大多数casse中,更好的选择是使用单向关系,特别是如果它是一个域类。这样做,您的设计将更好地表达您所在领域的平均值。

+1并检查@Pascal Thivent:指出,如果需要,我可以稍后添加它:这是我主要关心的问题。我通常尽量避免单向映射。仅仅因为数据库中的某些内容是使用单独的联接表建模的(无论出于何种原因),并不意味着我的对象模型也必须这样做。在上面的例子中,一个OneToOne映射对于单向解决方案来说是足够的(当然这必须遵守域)。这是非常清楚和自信的。我曾经有过这种怀疑,但现在一切都有了意义。@OneToMany仍然是有益的,即使你不需要它。使用
cascade
属性,在删除父实体+1@Daniel bleestiner时,您可以自动删除子实体(在@manytone一侧):处理它们所需的代码量可能会变得非常笨拙。谢谢你的建议
@Id
@Column(name = "ID", nullable = false, length = 8)
private String id;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "AId")
private List<B> BList; //<-- Is this attribute necessary?