sql - 如何使用 JPA/Hibernate 映射这种关系?
问题描述
我有两个共享一个公共键的表。我想要的是,当我为第一个表加载类时,我还将获得与第二个表对应的类列表,它们共享密钥。
更具体地说:tableA 的 id (id1) 存在于 tableB 的多个条目中。但是,tableB 使用复合键并使用 id1 和 id2 作为键。
我想要实现的是,当加载 tableA 的 POJO 时,我还获得了表 B 的所有条目,其中表 A 中的 id1 等于表 B 中的 id1。类似于:
public class TableA {
private String id1;
private List<TableB> list; // where id1 in tableA == id1 in tableB
}
table A id column:
id1
table B composite id:
id1 // same as for tableA
id2
解决方案
B 类将有一个部分依赖于 A 的复合标识符。这可以使用EmbeddedID
或通过指定 ID 类来映射。使用 ID 类如下所示:
实体 A
@Entity
public class A {
@Id
@Column(name = "id1")
private Long id1;
@OneToMany(mappedBy = "a")
private Set<B> bs;
}
实体 B
@Entity
@IdClass(Bid.class)
public class B {
@Id
@ManyToOne
@JoinColumn(name = "id1")
private A a;
@Id
@Column(name = "id1")
private Long id2;
}
B的ID等级
public class Bid implements Serializable{
//must be of same type as id of target entity A
private Long a;
private Long id2;
// **must** implement equals and hash code
}
推荐阅读
- python - pygame 窗口中没有显示任何内容
- python - 带有正则表达式的特殊子字符串
- python - rottentomatoes 的网页抓取出错了
- android - 如何将 Android 项目升级到 Java 11
- elixir - 安装 Ejabberd 模块不会启动底层依赖
- node.js - 在 digitalocean 服务器上使用 nodemailer 与节点一起发送电子邮件
- numba - 如何在咖啡框架中使用带有布尔值的 Numba?
- javascript - 为什么 typeof === 'number' 与 !isNaN(number) 不同
- python - 如何删除字符串的类似 html 的部分?
- python - 将日期时间转换为字符串 python