查询@ElementCollection JPA

我有EntityTransaction以下内容:

@Entity

class Transaction extends AbstractEntity<Long>{

private static final long serialVersionUID = 7222139865127600245L;

//other attributes

@ElementCollection(fetch = FetchType.EAGER, targetClass = java.lang.String.class)

@CollectionTable(name = "transaction_properties", joinColumns = @JoinColumn(name = "p_id"))

@MapKeyColumn(name = "propertyKey")

@Column(name = "propertyValue")

private Map<String, String> properties;

//getters and setters

}

所以,我的数据库Tabletransaction_properties

mysql> desc transaction_properties;

+---------------+--------------+------+-----+---------+-------+

| Field | Type | Null | Key | Default | Extra |

+---------------+--------------+------+-----+---------+-------+

| p_id | bigint(20) | NO | PRI | | |

| propertyValue | varchar(255) | YES | | NULL | |

| propertyKey | varchar(255) | NO | PRI | | |

+---------------+--------------+------+-----+---------+-------+

3 rows in set (0.00 sec)

现在,我想Transaction用键和值搜索实体。

    Path<Map<String, String>> propertiesPath = root.get("properties");

Path<String> propertyKeyPath = propertiesPath.<String> get("propertyKey"); //where m getting error

Path<String> propertyValuePath = propertyKeyPath.<String> get("propertyValue");

p = cb.and(p, cb.and(cb.like(propertyKeyPath, "%" + searchTrxnKey + "%"), cb.like(propertyValuePath, "%" + searchTrxnValue + "%")));

但是出现Path<String> propertyKeyPath = propertiesPath.<String>

get("propertyKey");以下错误:

[...] threw an unexpected exception: org.springframework.dao.InvalidDataAccessApiUsageException: Illegal attempt to dereference path source [null]; nested exception is java.lang.IllegalArgumentException: Illegal attempt to dereference path source [null]

我参考过的参考书之一是:Spring Data

JPA教程第四部分:JPA标准查询,但对我来说没有运气。

回答:

该解决方案是.join("properties")不是.get("properties")

Path<Map<String, String>> propertiesPath = root.join("properties");

predicate = (predicate != null) ? criteriaBuilder.and(predicate, criteriaBuilder.and(propertiesPath.in(searchTrxnKey), propertiesPath.in(searchTrxnValue)))

: criteriaBuilder.and(propertiesPath.in(searchTrxnKey), propertiesPath.in(searchTrxnValue));

以上是 查询@ElementCollection JPA 的全部内容, 来源链接: utcz.com/qa/412388.html

回到顶部