gpt4 book ai didi

java - Hibernate - 如何使用生成器为引用表创建主键?

转载 作者:行者123 更新时间:2023-11-29 01:57:18 25 4
gpt4 key购买 nike

我正在努力让 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;

// ...
}
  1. 只有父实体需要级联到子实体,而不是相反。
  2. Parent 仅具有关联的“反面”。
  3. 共享主键既是Child实体中的主键又是外键
  4. MapsId 注释允许您共享 @Id 和 OneToOne 关联的主键

关于java - Hibernate - 如何使用生成器为引用表创建主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25286745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com