我有一个Entity
Transaction
如下:
@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
}
所以,我的数据库Table
是transaction_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 标准查询,但对我来说没有运气。