【问题标题】:object db add compiste index doen't work对象数据库添加复合索引不起作用
【发布时间】:2014-10-17 06:32:49
【问题描述】:

我尝试在实体中添加复合索引但不起作用 得到以下错误:

[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;
}

【问题讨论】:

    标签: java jpa objectdb


    【解决方案1】:

    索引定义无效,因为多路径索引仅限于一个实体类(和其他可嵌入类),但不能分布在多个实体类中。

    在这种情况下,您应该使用两个单独的索引:

    • 地址集合的简单索引。
    • 地址中三个字段的复合索引。

    ObjectDB 将单独维护每个索引,但会在相关查询中将它们连接在一起。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 2017-04-26
      • 2016-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多