Единственное, что мне помогает, это определить отношение Объект вместо карты:
@ElementCollection
@CollectionTable(name = "COLLECTOR_ATTRIBUTES", joinColumns = @JoinColumn(name = "COLLECTOR_ID"))
private List<CollectorAttribute> attributes;
И объект enbedded
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Embeddable
public class CollectorAttribute {
@Column(name = "ATTRIBUTE_NAME")
private String key;
@Column(name = "ATTRIBUTE_VALUE")
private String value;
}
теперь вы можете запрашивать, используя свойствавстроенный объект
public interface CollectorRepository extends JpaRepository<Collector, Long> {
List<Collector> findByAttributesKeyAndAttributesValue(String key, String value);
}
Для извлечения COLLECTOR_ATTRIBUTES
в select мы можем определить @NamedEntityGraph
in Collector
class и метод репозитория следующим образом
@NamedEntityGraph(name = "Collector.attributes",
attributeNodes = @NamedAttributeNode("attributes"))
@Entity
@Table(name = "COLLECTOR")
public class Collector {
и report @EntityGraph
inМетод репозитория
public interface CollectorRepository extends JpaRepository<Collector, Long> {
@EntityGraph(value = "Collector.attributes", type = EntityGraph.EntityGraphType.LOAD)
List<Collector> findByAttributesKeyAndAttributesValue(String key, String value);
}
}
Теперь у вас есть также атрибуты
Если вы хотите загружать атрибуты и в других методах, вы должны использовать @EntityGraph
@EntityGraph(value = "Collector.attributes", type = EntityGraph.EntityGraphType.LOAD)
Optional<Collector> findById(Long var1);