我可以为您翻译以下内容:
我有一个实体:
@Entity
public class Transaction implements java.io.Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
protected Long id;
@ElementCollection(fetch = FetchType.EAGER)
@CollectionTable(name="TRANSACTION_CONFIG", joinColumns=@JoinColumn(name="TRANSACTION_ID"))
@MapKeyColumn(name = "PROPERTY_KEY")
@Column(name = "PROPERTY_VALUE")
protected Map<String, String> properties = new HashMap<String, String>();
public Transaction() {
super();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Map<String, String> getProperties() {
return properties;
}
public void setProperties(Map<String, String> properties) {
this.properties = properties;
}
}
我希望能通过“属性”查找交易。为此,我编写了以下的Spring Specification类来根据其属性过滤交易。
public static Specification<Transaction> matches(final Map<String, String> criteria) {
return new Specification<Transaction>() {
@Override
public Predicate toPredicate(Root<Transaction> root, CriteriaQuery<?> query,
CriteriaBuilder builder) {
List<Predicate> predicates = new ArrayList<Predicate>();
Path<Map<String, String>> propertiesRoot = root.join("properties");
for (String key : criteria.keySet()) {
Predicate p = builder.and(propertiesRoot.in(key), propertiesRoot.in(criteria.get(key)));
predicates.add(p);
}
return builder.isTrue(propertiesRoot.in(criteria));
}
};
但是似乎没有返回任何内容。您有什么关于我做错了什么的想法吗?