假设我有以下实体和关联:
实体A:
@Entity
public class A {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "a", cascade = CascadeType.ALL, orphanRemoval = true)
private List<B> b;
}
实体 B:
@Entity
public class B {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "a_id")
private A a;
@OneToMany(mappedBy = "b", cascade = CascadeType.ALL, orphanRemoval = true)
private List<C> c;
}
实体 C:
@Entity
public class C {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "b_id")
private B b;
}
使用 CrudRepository
的 .findAll()
方法为实体 A
返回每个 A
及其关联的 B
在列表中。此外,每个 B
都将在列表中包含其关联的每个 C
。
我的问题是:如果我在某些情况下只想加载所有 A
及其 B
,但我不想要 C
在 B
中,这可能吗?我可以创建自定义查询来执行此操作,还是有其他方法?我希望很清楚我想要实现的目标。
最佳答案
我认为您的问题是 OneToMany
关系的 one
端的 mappedBy
值。
mappedBy
值必须是另一端的变量名。所以在你的情况下,你可以这样做:
- 在实体 A 中:将
mappedBy = "citizen"
更改为mappedBy = "a"
- 在实体 B 中:将
mappedBy = "citizen"
更改为mappedBy = "b"
我知道实体 a、b、c 只是一个示例,但在设计模型关系时应遵循上述模式。
关于java - 加载没有关联的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55436806/