我的域类中有一个map属性,我正在尝试在存储库中创建一个查询,或者使用默认的“findByBlah”语法从数据库中提取属性。目前不起作用。我可以很容易地用SQL编写查询,但我不知道JPQL需要什么。如何使用JPQL或接口“findBy”语法从数据库中提取这些数据?无论我当前使用哪种存储库方法,当它从数据库中提取“收集器”时,属性(映射或复杂对象列表)始终为空。
域对象:
@Builder
@Data
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "collector")
public class Collector {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "collector_id")
private Long id;
@NotNull
private String name;
@ElementCollection
@MapKeyColumn(name = "attribute_name")
@Column(name = "attribute_value")
@CollectionTable(name = "collector_attributes", joinColumns = @JoinColumn(name = "collector_id"))
private Map<String, String> attributes;
@Override
public String toString() {
return ObjectUtil.print(this);
}
}
存储库:
public interface CollectorRepository extends PagingAndSortingRepository<Collector, Long> {
@Query(value = "select c from Collector c where c.attributes[$1] = $2")
Page<Collector> findByAttributesNameAndValue(String name, String value, Pageable pageable);
}
这是在H2控制台中工作的查询:
SELECT * FROM Collector a INNER JOIN collector_attributes b ON a.collector_id = b.collector_id where b.attribute_name= 'nickName' and b.attribute_value = 'Critikon'
唯一对我有用的是定义一个对象关系而不是一个映射:
@ElementCollection
@CollectionTable(name = "COLLECTOR_ATTRIBUTES", joinColumns = @JoinColumn(name = "COLLECTOR_ID"))
private List<CollectorAttribute> attributes;
和嵌入的对象
@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);
}
要在select中检索COLLECTOR\u属性,我们可以在COLLECTOR和repository方法中定义NameIdentityGraph,如下所示
@NamedEntityGraph(name = "Collector.attributes",
attributeNodes = @NamedAttributeNode("attributes"))
@Entity
@Table(name = "COLLECTOR")
public class Collector {
并在Repository方法中报告EntityGraph
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);
如何在Spring Data Jpa中将映射映射到存储库中的查询? 下面是我的通用存储库源代码。 如下所示,我希望接收queryParams作为参数,并将queryParams对应的键和值映射到where子句。 因为它是一个GenericRepository,所以无法实现,我想把映射的内容放在@Query中。 我一直在搜索,但我找不到任何关于它的信息,所以我不知道如何解决这个问题。 如果有办法,请
我试图使用JPA继承来表示这些。 nnm\U tran实体 便宜货实体 我认为到目前为止,这一切都连接正确。当我使用自定义查询附加Spring数据存储库时,我的问题就来了。 存储库 当代理该方法并执行该方法时,它会生成SQL语句,选择不同的nnm\U tran。nnm\U tran t1 LEFT OUTER JOIN io\U plan t0 ON(t1.plan\U number=t0.pla
应用:Spring防尘套 我试图用SqlResultSetMapping和NamedNativeQuery将非实体类映射到JPA存储库。 运行应用程序时出现以下错误: 通过字段'cityAddressRepository'表示不满足的依赖关系;嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名称为'cityAddress
我有一个springboot项目,为了执行请求,我正在连接到我的mysql数据库。我有一个实体ExportBatch: 我在ExportBatchRepository中定义了一个新方法: 在我的控制器里,我是这样做的: 当我调用“/GetLastBatchsProblemes”时会遇到这个异常:java.lang.ClassCastException:[Ljava.lang.Object;不能强制
我想在中编写一个类似的查询,但它没有返回任何内容: -它不起作用。 一样完美。 以下是我的代码:
目前我一直在使用以下Spring JPA存储库自定义查询, 我需要修改这个查询时,筛选文本将是逗号分隔的值。但按照以下方式,它将是一个动态查询,我如何执行它。 我需要构建动态查询,