2017-02-14 53 views
1

我使用的是hazelcast映射到存储对象非常类似以下内容:hazelcast不等于谓词搜索集合属性

@Entity 
@Table(name = "organization") 
public class Organization 
{ 
    public static final String MAP_NAME = "organizations"; 

    @Id 
    @Column(name = "organizationId", unique = true, nullable = false, columnDefinition = "VARCHAR(36)") 
    protected String organizationId = UUID.randomUUID().toString(); 

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JoinColumn(name = "organizationId") 
    private Set<RecordKeeperConfig> recordKeeperConfigs; 
} 

而且RecordKeeperConfig的定义如下:

@Entity 
@Table(name = "recordKeeperConfig") 
public class RecordKeeperConfig 
{ 
    public static final String MAP_NAME = "recordKeeperConfig"; 

    @Id 
    @Column(name = "recordKeeperConfigId", unique = true, nullable = false, columnDefinition = "VARCHAR(36)") 
    protected String recordKeeperConfigId = UUID.randomUUID().toString(); 

    @Column(name = "organizationId", columnDefinition = "VARCHAR(36)") 
    protected String organizationId; 

    @Enumerated(EnumType.STRING) 
    @Column(name = "type", length = 8) 
    protected RecordKeeperType type; 
} 

最后,我想获取至少有一个RecordKeeperConfig的所有组织对象的集合。我试着用Predicate.notEqual(“recordKeeperConfigs”,NULL),但它产生了以下异常:

java.lang.IllegalArgumentException: Cannot use NotEqualPredicate predicate with an array or a collection attribute 

回答

0

尝试执行逻辑运算,如实体类的瞬时方法。然后,而不是收集,构建在该Hazelcast断言:

方法:

@javax.persistence.Transient 
public boolean isRecordKeeperConfigsNotEmpty() { 
    return getRecordKeeperConfigs() != null && !getRecordKeeperConfigs().isEmpty(); 
} 

谓:

EntryObject e = new PredicateBuilder().getEntryObject(); 
PredicateBuilder predicate = e.is("recordKeeperConfigsNotEmpty"); 
Collection<Organization> filteredOrganizations = organizationMap.values(predicate);