我有一个如下的实体:
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。
现在,一个用例需要查找具有特定依赖关系的所有项。例如:
我想编写一个查询来获取所有具有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);
}