如何查询具有多对多关系的实体?
How to query for entities with many-to-many relationships?
我有 3 个关系中的实体。以下是我的类的简化示例:
@Entity
public class Action {}
@Entity
public class Instance {
@ManyToMany
private Set<Action> actions;
@ManyToMany
private Set<CadSystem> cadSystems;
}
@Entity
public class CadSystem {}
如何查询属于特定 Action
和 CadSystem
的所有 Instance
?
例如,我想在 JpaRepository
:
中执行以下操作
public interface InstanceRepository extends JpaRepository<Instance, Long> {
List<Instance> findByActionAndCadSystem(Action action, CadSystem cadSystem);
}
但这不可能,因为 Instance
没有名为 action
和 cadSystem
的字段。
我认为以下方法可行:
public interface InstanceRepository extends JpaRepository<Instance, Long> {
List<Instance> findByActionsAndCadSystems(Set<Action> actions, Set<CadSystem> cadSystems);
}
但在这种情况下,我总是必须创建一个只有一个元素的新 Set
。
使用查询。另请注意,由于关联是多对多的,此查询可能 return 多个操作:
select i from Instance i
join i.actions action
join i.cadSystems cadSystem
where action = :action
and cadSystem = :cadSystem
我有 3 个关系中的实体。以下是我的类的简化示例:
@Entity
public class Action {}
@Entity
public class Instance {
@ManyToMany
private Set<Action> actions;
@ManyToMany
private Set<CadSystem> cadSystems;
}
@Entity
public class CadSystem {}
如何查询属于特定 Action
和 CadSystem
的所有 Instance
?
例如,我想在 JpaRepository
:
public interface InstanceRepository extends JpaRepository<Instance, Long> {
List<Instance> findByActionAndCadSystem(Action action, CadSystem cadSystem);
}
但这不可能,因为 Instance
没有名为 action
和 cadSystem
的字段。
我认为以下方法可行:
public interface InstanceRepository extends JpaRepository<Instance, Long> {
List<Instance> findByActionsAndCadSystems(Set<Action> actions, Set<CadSystem> cadSystems);
}
但在这种情况下,我总是必须创建一个只有一个元素的新 Set
。
使用查询。另请注意,由于关联是多对多的,此查询可能 return 多个操作:
select i from Instance i
join i.actions action
join i.cadSystems cadSystem
where action = :action
and cadSystem = :cadSystem