如何强制 JPA 使用复合主键索引顺序

How to enforce JPA to use composite primary key index order

table 姓名:转移

列:IDENTIFIER,KEY,TRANSFER_NUMBER,FIRST_NAME,LAST_NAME

Transfer 的 table 复合主键是:IDENTIFIER,KEY,TRANSFER_NUMBER

传输的 table 索引 INDEX1 定义:IDENTIFIER ASC,KEY ASC,TRANSFER_NUMBER ASC

转让 pojo

@Entity
@Table(name = "TRANSFER", indexes = { @Index(name = "INDEX1", columnList = "identifier,key,transferNbr") })
@Getter
@Setter
@DynamicUpdate
public class Transfer implements Serializable, Cloneable {

    private static final long serialVersionUID = 1L;

    @EmbeddedId
    private TransferPk id;
    
    @Column(name = "FIRST_NAME")
    private String firstName;
    
    @Column(name = "LAST_NAME")
    private String lastName;

TransferPk pojo

        @EqualsAndHashCode
        @Getter
        @Setter
        @Embeddable
        public class TransferPk implements Serializable {

        private static final long serialVersionUID = 1L;

        @Column(name = "IDENTIFIER")
        private String identifier;
        @Column(name = "KEY")
        private int key;
        @Column(name = "TRANSFER_NUMBER")
        private String transferNbr;

检索转移的代码

    TransferPk id = new TransferPk();
    id.setIdentifier("123");
    id.setKey(456);
    id.setTransferNbr("789");
    // This JPA query also uses the reverse Transfer of index
    Optional<Transfer> Transfer = TransferRepo.findById(id);

我可以毫无问题地从数据库中获取数据,HQL 是

    select <all fileds> from TRANSFER transfer0_ where transfer0_.TRANSFER_NUMBER=? and transfer0_.KEY=? and transfer0_.IDENTIFIER=?

虽然我们使用了索引注解,但 JPA 仍然没有使用 Transfer table (INDEX1) 中定义的索引,因此检索需要更多时间。

如何强制 JPA 使用索引顺序。非常感谢任何帮助。谢谢

我不知道您所说的“索引顺序”是什么意思,但是您在 @Index 注释中使用的 JPA 属性名称是错误的。使用像 @Index(name = "INDEX1", columnList = "identifier,key,transfer_number")

这样的列名

首先,您创建索引的方式是错误的。列列表将始终具有 table 列名称而不是字段名称。

在你的情况下会是:---

@Table(name = "TRANSFER", indexes = { @Index(name = "INDEX1", columnList = "IDENTIFIER,KEY,TRANSFER_NUMBER ASC") })

"DESC/ASC" 用于索引顺序。

希望,它应该能解决您的问题。