Получите минимум строки из рекурсивного запроса гибернации - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть объект, который имеет отношение ManyToMany к себе:

@Entity
@Table(name = "asset")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Asset implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Enumerated(EnumType.STRING)
@Column(name = "provided_c")
private EnumerationClass providedC; // A0, A1, A2, ...

@ManyToMany
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@JoinTable(name = "asset_dependencies",
    joinColumns = @JoinColumn(name = "assets_id",  `referencedColumnName = "id"),`
    inverseJoinColumns = @JoinColumn(name = "dependencies_id", referencedColumnName = "id"))
private Set<Asset> dependencies = new HashSet<>();

Когда я вызываю этот запрос в моем хранилище данных Spring, я получаю все активы и зависимые от них.

@Query(value = "select distinct asset from Asset supporting_asset left join fetch asset.dependencies")
List<Asset> findAllWithEagerRelationships();

Но мне нужно получить другое вычисляемое поле.Все активы имеют категоризацию (при условии C: A0 -A3).Рассчитанное поле будет самой низкой категорией всех активов, от которых зависит этот актив.

Есть ли хороший способ для достижения этой цели?Или какой будет правильный подход?

1 Ответ

0 голосов
/ 07 февраля 2019

Используйте @Formula для достижения этой функциональности.Вы можете разместить запрос, оценивающий самую низкую зависимую категорию, и он будет запущен при загрузке объекта.

...