如何强制 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" 用于索引顺序。
希望,它应该能解决您的问题。
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" 用于索引顺序。
希望,它应该能解决您的问题。