我正在努力让 Hibernate(使用 MySQL)从“主表”生成引用表的主键。我的问题是,我有一个包含 2500 万行的大表,现在我需要添加多个附加列,因为将来会添加更多列,所以我选择使用引用表的方式,而不是将列添加到主表(重建需要几个小时......:)
所以有一个主表和一个引用表。在我的构想中,引用表的主键应该从主表的主键生成。我可以首先插入
一个条目到主表中,然后选择
它并使用它的主键插入
到引用表中,但是这个对我来说似乎不是最好的方法。所以我想使用 Hiibernate 的 generators
,但我不知道如何使用。
这是主表:
@Entity
@Table
public class Task {
@Id
@GeneratedValue
@Column()
private Integer id;
// ...
@OneToOne(mappedBy = "task_ref", orphanRemoval=true, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Stuff stuff;
// ...
}
以及引用表:
@Entity
@Table
public class Stuff {
@Id
@Column(name = "stuff_id")
@GeneratedValue()
private Integer stuff_id;
// ...
@OneToOne(orphanRemoval=true, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Task task_ref;
// ...
}
那么..如何使用生成器从表 Task
的主键创建表 Stuff
的主键?
非常欢迎任何建议或其他解决方案!
谢谢!
最佳答案
这是您应该如何将双向 OneToOne 关联与共享主键映射:
@Entity
@Table
public class Task {
@Id
@GeneratedValue
private Integer id;
// ...
@OneToOne(mappedBy = "task_ref", orphanRemoval=true, fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Stuff stuff;
// ...
}
@Entity
@Table
public class Stuff {
@Id
@Column(name = "stuff_id")
private Integer stuff_id;
// ...
@OneToOne(fetch = FetchType.LAZY)
@MapsId
@JoinColumn(name = "stuff_id")
private Task task_ref;
// ...
}
- 只有父实体需要级联到子实体,而不是相反。
- 父级仅具有关联的“反向”端。
- 共享主键既是子实体中的主键,又是外键
- MapsId 注释允许您共享 @Id 和 OneToOne 关联的主键
关于java - Hibernate - 如何使用生成器为引用表创建主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25286745/