2017-02-14 23 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);