【发布时间】:2020-12-04 14:41:43
【问题描述】:
我有一个实体模型 (a) 和一些其他实体 (x),例如手机、平板电脑、汽车等。
entities(x) 具有引用 model(a) 的主键的主键,因此entities(x) 只能采用 model(a) 实体的值。 我说的是 IS-A 关系。
我还需要从两端访问。
我需要有关休眠映射的帮助。 我现在做什么但不起作用:
- 模型实体
@Data
@Entity(name = "Model")
@Table(name = "model", schema = "mysch")
public class Model {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "model_id", columnDefinition = "BIGINT UNSIGNED")
private long id;
@Column(name = "description", length = 255, nullable = false, unique = true)
private String description;
@OneToOne(mappedBy = "model")
private Mobile mobile;
- 移动实体
@Data
@Entity(name = "Mobile")
@Table(name = "mobile", schema = "mysch")
public class Mobile {
@Id
@Column(name = "mobile_id", columnDefinition = "BIGINT UNSIGNED")
private long id;
@OneToOne
@JoinColumn(name = "mobile_id", referencedColumnName = "model_id", nullable = false, foreignKey = @ForeignKey(name = "FK_Mobile_Model"))
private Model model;
我想要的是在移动表中创建一个引用模型表的 PK 的 PK。
【问题讨论】:
-
关系似乎不对。据我了解,每个
Mobile都有一个Model,但一个Model可以被多个Mobiles 引用。那正确吗?如果是这样,您应该在Mobile中使用@ManyToOne关系,并可能在Model上使用@OneToMany关系。 -
不,抱歉,如果我的解释不够好。手机是一个PK,所以它必须是独一无二的。因此,假设模型具有 ids: 1,2,3,4,5 。 id = 1 可用于移动设备。 id = 2 也可用于移动设备。 id =3 可用于汽车。但是 id =1 不能再次在移动设备中使用。两个id都是PK,所以是唯一的..
标签: java hibernate annotations mapping