【发布时间】:2014-10-06 20:20:07
【问题描述】:
我正在努力让 Hibernate(使用 MySQL)从“主表”生成参考表的主键。我的问题是我有一个有 2500 万行的大表,现在我需要添加多个额外的列,因为将来会添加更多列,我选择使用引用表的方式而不是添加列主表(重建需要几个小时...... :)
所以有一个主表和一个参考表。在我的概念中,参考表的主键应该由主表的主键生成。我可以先insert 进入主表,然后select 将其主键用于insert 进入参考表,但这对我来说似乎不是最好的方法。所以我想用 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 的主键?
非常欢迎任何建议或其他解决方案!
谢谢!
【问题讨论】:
-
从您的代码看来,您正在做的是为每个类创建一个 PK 对吗?但是根据您的解释,您想将其中一个类的 ID (Pk) 作为另一个类的 ID (PK) 的一部分,对吗?我不确定你想通过解释来完成什么,你能澄清一下吗?
-
@AngelVillalain 对不起,代码令人困惑。我的意思是 PK Stuff.stuff_id 应该从主表(Task.id)的相应 PK 生成,因此它们应该相等,我可以对它们进行 JOIN。
-
Stuff是不是类似于Task的子类? -
您还可以添加有关架构如何的信息,以防您无法更改架构,以便我有更好的画面。
标签: java mysql hibernate jpa orm