Hibernate对多对多自反连接查询

时间:2017-11-06 08:03:29

标签: java mysql spring hibernate

我有一个如下的实体:

public class Item {
    @EmbeddedId
    private Id id;
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "ITEM_DEPENDENCIES", joinColumns = { @JoinColumn(name = "id"), @JoinColumn(name = "version") }, inverseJoinColumns = { @JoinColumn(name = "dependencyid"), @JoinColumn(name = "dependencyversion") })
    private Set<Item> dependencies;
    //....getters and setters...
}

@Embeddable
public class Id implements Serializable {
    @Column(name = "id")
    private String id;
    @Column(name = "version")
    private String version;
    //....getters and setters...
}

每个项目可以具有多个依赖项,并且每个项目可以由多个项目引用。因此,我尝试创建一个由hibernate成功创建的自引用表ITEM_DEPENDENCIES。

现在,一个用例需要查找具有特定依赖关系的所有项。例如:

enter image description here

我想编写一个查询来获取所有具有c和d作为依赖项的项。即a,b和g,h。

我正在尝试在spring存储库中编写查询但无法达成解决方案。请指导我的设计是否正确,如何编写此查询,或者是否需要以更好的方式重新设计表格。

@Repository
public interface ItemRepository extends JpaRepository<Item, Id>, JpaSpecificationExecutor<Item> {

    @Query(value = "SELECT contents " //
            + "FROM Item contents join Item.dependencies dependencies " //
            + "WHERE dependencies.id.id = :id " //
            + "AND dependencies.id.version = :version")
    List<Item> findByDependency(String id, String version);
}

0 个答案:

没有答案