【发布时间】:2015-08-14 08:49:43
【问题描述】:
我有一个Phone 和一个Phone4Phone_Map 表,第二个表设置了规则,因此当手机坏了时,可以将其更换为另一部类似的手机。
Phone:
------
idPhone INT(11) PK
name VARCHAR()
model VARCHAR()
price LONG
Phone4Phone_Map:
----------------
idPhone_in INT(11) PK
idPhone_out INT(11) PK
valid_since TIMESTAMP
reason VARCHAR()
我很难理解如何进行映射。我想知道Phone 上的@OneToMany 自我引用是否会很好,但我不知道如何包含来自Phone4Phone_Map 的额外字段(valid_since 和reason),这是我的想法不映射第二个表,我什至不知道它是否可能。
【问题讨论】:
-
如您所见,自我引用的
@OneToMany不起作用,因为一部电话可以有许多替代品/可以替代很多。如果您删除其他字段,您可以使用@ManyToMany;否则你需要第二个实体。 -
您需要一个@OneToMany 到Phone4Phone_Map。如您所见,可能有要求可以将一部手机更换为多部手机,例如iPhone5可以更换为iPhone5或iPhone5S,在可用性可能是?想想你对未来发展的要求。
-
@SJuan76,我明白你的意思,但就我而言,我只想拥有可以替代的手机集合(我不需要可以替换的手机集合。 .. idk 如果这会给 JPA 带来某种问题)。在这种情况下,额外的字段也是必需的。
-
@karthik-r,所以您的想法是创建两个实体,并仅将 Phone4Phone_Map 与
@OneToMany关联映射? -
@Jonathan La'Fey 提到的任何答案看起来都很好。如果您需要它作为复合代码,您可以根据您的要求调整您的代码。你比我们更了解故事结构和问题。
标签: java spring-boot jpa