假设我有以下实体和关联:
实体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;
}
使用.findAll()
的CrudRepository
方法实体A
,它将返回每个A
及其相关的B
列表。此外,每个B
将列出其中每个相关的C
。
我的问题是:如果我在某些情况下只想用A
加载所有B
,但我不想在C
中使用B
,这可能吗?我可以创建自定义查询来执行此操作,还是有其他方法?我希望很清楚我想要实现的目标。
我认为你的问题是在mappedBy
关系的one
方面的OneToMany
值。 mappedBy
值必须是另一方的变量名称。所以在你的情况下,你可以这样做:
mappedBy = "citizen"
更改为mappedBy = "a"
mappedBy = "citizen"
更改为mappedBy = "b"
我知道实体a,b,c只是一个例子,但在设计模型关系时应遵循上述模式。