Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA:如何更改主键中列的顺序_Java_Postgresql_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

Java JPA:如何更改主键中列的顺序

Java JPA:如何更改主键中列的顺序,java,postgresql,hibernate,jpa,spring-data-jpa,Java,Postgresql,Hibernate,Jpa,Spring Data Jpa,我使用Spring数据JPA和PostgreSQL 10 考虑到课程 @Entity @Table(name = "test_table") @IdClass(TestTableId.class) public class TestTable { @Id private int b; @Id private int a; private int c; // Getters, setters, hashCode() and equals() } 及

我使用Spring数据JPA和PostgreSQL 10

考虑到课程

@Entity
@Table(name = "test_table")
@IdClass(TestTableId.class)
public class TestTable {
    @Id
    private int b;
    @Id
    private int a;
    private int c;
    // Getters, setters, hashCode() and equals()
}

在数据库中,该表由hibernate通过

CREATE TABLE test_table
(
    a integer NOT NULL,
    b integer NOT NULL,
    c integer NOT NULL,
    CONSTRAINT test_table_pkey PRIMARY KEY (a, b)
)

出于性能原因,我想要
主键(a,b)
而不是
主键(b,a)
。如何在不重命名列的情况下实现这一点?

尝试@embeddeble for复合键

@Embeddable
public class key implements Serializable {

    private static final long serialVersionUID = 1L;
    @Column(name = "a")
    private String a;
    @Column(name = "b")
    private String b;
}

public class App implements Serializable {

    private static final long serialVersionUID = 1L;
    @EmbeddedId
    private Key id;
}

JPA规范不允许在模式定义中定义列顺序的机制。一些JPA提供者(例如DataNucleus)允许扩展来实现这一点。不知道你的供应商。你可以自己定义模式,这没有用。即使我交换a和b,我也会得到
约束测试\u table\u pkey主键(a,b)
而不是
。。。主键(b,a)
@Embeddable
public class key implements Serializable {

    private static final long serialVersionUID = 1L;
    @Column(name = "a")
    private String a;
    @Column(name = "b")
    private String b;
}

public class App implements Serializable {

    private static final long serialVersionUID = 1L;
    @EmbeddedId
    private Key id;
}