如何查询具有多对多关系的实体?

时间:2015-04-30 10:48:11

标签: java spring spring-data spring-data-jpa

我有三个有关系的实体。以下是我的类的简化示例:

@Entity
public class Action {}

@Entity
public class Instance {

    @ManyToMany
    private Set<Action> actions;

    @ManyToMany
    private Set<CadSystem> cadSystems;

}

@Entity
public class CadSystem {}

如何查询属于特定InstanceAction的所有CadSystem? 例如,我想在JpaRepository中执行以下操作:

public interface InstanceRepository extends JpaRepository<Instance, Long> {

    List<Instance> findByActionAndCadSystem(Action action, CadSystem cadSystem);

}

但这是不可能的,因为Instance没有名为actioncadSystem的字段。 我认为以下内容可行:

public interface InstanceRepository extends JpaRepository<Instance, Long> {

    List<Instance> findByActionsAndCadSystems(Set<Action> actions, Set<CadSystem> cadSystems);

}

但在这种情况下,我总是要创建一个只有一个元素的新Set

1 个答案:

答案 0 :(得分:0)

使用查询。另请注意,由于关联是多对多的,因此此查询可能会返回多个操作:

select i from Instance i
join i.actions action
join i.cadSystems cadSystem
where action = :action
and cadSystem = :cadSystem