【问题标题】:How to specify order of fields inside a composed primary key?如何指定复合主键内的字段顺序?
【发布时间】:2021-02-11 01:26:10
【问题描述】:

这个问题是关于在组合索引中排序的,这是一个比在表中排序列更具体的问题。

我有一个带有组合 id 的简单类:

@Embeddable
class PrimaryKeyClass {
    private int a;
    private int b;
}

@Entity
class SimpleClassWithComposedId {
    @EmbeddedId
    PrimaryKeyClass id;
}

似乎hibernate正在生成按字典顺序排序的字段的主键,至少在我的测试用例中发生了这种情况。但是我想知道是否有一种方法可以指定主键中字段的顺序,因为这非常重要,因为我们可以大量优化使用组合索引前缀的查​​询(我在 @ 987654321@)

【问题讨论】:

    标签: java hibernate jpa-2.1


    【解决方案1】:

    一种选择是按词法顺序重命名表中的列。

    或者,添加Column 名称有帮助吗?

    @Column(name = "a")
    private int k_2a;
    
    @Column(name = "b")
    private int k_1a;
    

    【讨论】:

    • 我做了更多的测试,发生的事情是休眠考虑了字段名称而不是@Column中的名称。这很可悲。
    • @krionz,哦,好的。因此,更改表列名称似乎是唯一可能的选择。(需要照顾任何其他直接从表中读取的现有客户端)
    • @krionz,最后一个建议,您是否尝试过以不同的顺序添加 java 类属性以及名称更改和 @Column 注释。 @Column(name = "b") private int k_1a; @Column(name = "a") private int k_2a; 之类的东西不确定这是否可行,如果您还没有,请试一试。当您找到工作解决方案而不更新表列名称时,请进行更新。谢谢你,一切顺利
    • 是的,它之所以起作用,是因为 nane 的变化,而不是因为类内的属性顺序或 @Column 注释内的名称。我想我会更改实体属性的名称。谢谢。
    • @krionz,感谢您分享结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 2021-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多