当前位置: 首页 > 知识库问答 >
问题:

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

陆宝
2023-03-14

表名称:传输

列:标识符、键、传输号、名、姓

Transfer的表复合主键是:标识符、键、Transfer_编号

传输的表索引INDEX1定义:标识符ASC、键ASC、传输号ASC

转移波乔

@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;

波乔

        @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仍然没有使用传输表(INDEX1)中定义的索引,因此检索需要更多时间。

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

共有2个答案

吕皓
2023-03-14

首先,你创建索引的方式是错误的。列列表将始终使用表列名而不是字段名。

在你的情况下,应该是:---

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

“DESC/ASC”用于索引顺序。

希望它能解决你的问题。

笪俊迈
2023-03-14

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

 类似资料:
  • 问题内容: 我在复合主键中的列排序遇到麻烦。我有一个包含以下内容的表: 在此映射中使用它: 当我使用具体的@Table类将AbstractMessage子类化时,hibernate会创建数据库和表而不会出错。问题在于,hibernate会以我想要的相反顺序生成带有列的复合主键。 我希望主键是 因为我知道我最多将有10个位置,但是每个位置有很多时间。 任何帮助将不胜感激=) 问题答案: 我真的不认为

  • 我有以下表格,如何将它们映射到JPA实体: 事件表与会议表具有一对多的关系。我如何在JPA中映射这种双向关系?

  • 问题内容: 我的JPA模型中有以下类(省略了getters,setters和无关字段): 我需要定义一个类,使得当从所述类生成DDL时,相应的表的主键被由密钥和。我尝试了以下方法: 但这会为表生成以下内容: 请注意,和都是可为空的,当我尝试将DDL加载到SQL Server时会导致以下错误 无法在表“ PRICE”中的可为空的列上定义PRIMARY KEY约束 我不明白为什么这些可以为空,因为在域

  • 我为这个特殊的问题找了很多,但我没有找到任何具体的解决办法。我在一个表中有一个复合主键,这个复合主键的一个字段是另一个表的复合主键的一部分。您可以说这个特定的字段是第二个表中的外键,但是在表定义中没有定义任何独占外键约束。对于第一个表中的每个rec,第二个表中可能有多条记录。我试图使用SPringBoot-JPA-Hibernate实现这一点,但无法实现。有人能帮我吗。以下是德泰:- 我有一个US

  • 问题内容: 我有两个父表:和。 处理表: 访问表: 现在,我尝试创建一个子表: 一切正常,直到第3行。从第三行开始,即显示一条消息:。 问题答案: CONSTRAINT fk_column FOREIGN KEY (column1, column2, … column_n) REFERENCES parent_table (column1, column2, … column_n) 在你的情况下

  • 问题内容: 我有以下表格如何将它们映射到JPA实体: 事件表与会议表具有一对多关系。如何在JPA中映射这种双向关系? 问题答案: 在JPA 2.1规范的第2.4.1节中讨论。