Итак, я приведу очень грубый пример того, что я пытаюсь сделать. Вот примеры классов
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name="person")
public class SuperHero {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="person_id")
private long id;
private String name;
private String surname;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "person_abilities",
joinColumns = @JoinColumn(name = "person_id"),
inverseJoinColumns = @JoinColumn(name = "ability_id")
)
List<Ability> abilities;
public void addAbility(Ability ability) {
this.abilities.add(ability);
}
public void removeAbility(Ability ability) {
this.abilities.remove(ability);
}
}
И это второй класс:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "abilities")
public class Ability {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ability_id")
private long id;
private String ability;
}
Предположим теперь, что я хочу найти всех героев, которые имеют определенные способности. Например, если у меня есть Тор, обладающий способностями: Полет, Сила, Молния (idk), и я ищу героев с комбинированным полетом и силой, он должен появиться в качестве одного из результатов исследования. Так что мне было интересно, какой самый эффективный способ сделать это.
Я, конечно, использовал чисто Java методы, поэтому анализировал список героев, но это могло быть неэффективно для больших кусков данных, потому что Для этого вы должны запросить и загрузить всю таблицу базы данных. Есть ли способ сделать это через JPA, который не получает все записи, а затем анализирует их в java?