2014-10-17 5 views
1

Я пытаюсь добавить compostite индекс в enttiy, но не работает следующая ошибка есть:объект дб добавить compiste указательный doen't работу

[error] application - message= Unexpected database state: BTree 49 is not found, cause= [ObjectDB 2.5.4] javax.persistence.PersistenceException 
Unexpected database state: BTree 49 is not found (error 147 

Классы моделей:

@Entity 
@Table(name = Customer.TABLE_NAME) 
@javax.jdo.annotations.Index(members=    
    {"addresses.firstName,addresses.lastName,addresses.company"}) 
public class Customer extends ObjectDBBaseModel<Customer> { 
    List<Address> addresses; 
} 


@Entity 
@Table(name = Address.TABLE_NAME) 
public class Address<T extends ObjectDBBaseModel> extends ObjectDBBaseModel<T> { 

    public static final String TABLE_NAME = "address"; 
    public static final Address NULL = new Address(); 
    public static ODBFinder<Address> find = new ODBFinder<>(Address.class, NULL); 

    public Address() { 
     super((Class<T>) Address.class); 
    } 

    @Column(name = "address_type_enum") 
    @Enumerated(EnumType.STRING) 
    private AddressTypeEnum addressTypeEnum; 

    @Column(name = "gender_enum") 
    @Enumerated(EnumType.STRING) 
    private GenderEnum genderEnum; 

    private String title; 

    private String firstName; 

    private String lastName; 

    private String company; 

    private String street1; 
} 

ответ

1

Определение индекса является недействительным , так как индекс множественного пути ограничен одним сущностным классом (и дополнительными встраиваемыми классами), но не может распространяться на несколько классов сущностей.

В этом случае вы должны использовать два отдельных индекса:

  • Простой индекс по сбору адресов.
  • Композитный индекс на трех полях в адресе.

ObjectDB будет поддерживать каждый индекс отдельно, но будет объединяться вместе в соответствующие запросы.