当前位置: 首页 > 面试题库 >

如何使用JPA / Hibernate设置复合主键的列顺序

尹承泽
2023-03-14
问题内容

我在复合主键中的列排序遇到麻烦。我有一个包含以下内容的表:

@Embeddable
public class MessageInfo implements Serializable {

    private byte loc;
    private long epochtime;

    @Column(name = "loc")
    public byte getLoc() {
        return loc;
    }

    @Column(name = "epochtime")
    public long getEpochtime() {
        return epochtime;
    }
}

在此映射中使用它:

@MappedSuperclass
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class AbstractMessage implements Message {

    private MessageInfo info;
    private int blah;

    @EmbeddedId
    public MessageInfo getInfo() {
        return info;
    }
}

当我使用具体的@Table类将AbstractMessage子类化时,hibernate会创建数据库和表而不会出错。问题在于,hibernate会以我想要的相反顺序生成带有列的复合主键。

CREATE TABLE  `mydb`.`concrete_table` (
  `epochtime` bigint(20) NOT NULL,
  `loc` tinyint(4) NOT NULL,
  `blah` smallint(6) DEFAULT NULL,
  `foo` smallint(6) DEFAULT NULL,
  PRIMARY KEY (`epochtime`,`loc`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

我希望主键是

PRIMARY KEY (`loc`,`epochtime`)

因为我知道我最多将有10个位置,但是每个位置有很多时间。

任何帮助将不胜感激=)


问题答案:

我真的不认为有办法做到这一点。我所能做的就是建议您使用已有的SQL create语句(将其更改为正确的顺序)并在生产中手动运行它。

在测试中让Hibernate做事情。



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

  • 表名称:传输 列:标识符、键、传输号、名、姓 Transfer的表复合主键是:标识符、键、Transfer_编号 传输的表索引INDEX1定义:标识符ASC、键ASC、传输号ASC 转移波乔 波乔 检索传输的代码 我能够从数据库中获取数据,没有任何问题,HQL是 虽然我们使用了索引注释,但JPA仍然没有使用传输表(INDEX1)中定义的索引,因此检索需要更多时间。 如何强制JPA使用索引顺序。非常

  • 我有一个复合主键,其中一个键为空。实体中必须存在哪些注释,以便我可以使用此类JPA获取数据: 我尝试使用IdClass Annotation和EmbeddedId Annotation,但出现异常: 例如,使用了数据,但在实际项目中使用了类似的数据,因此无法用值替换null。

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

  • 我在使用复合主键的hibernate实体集时遇到了问题。 我们的应用程序中有一个概念“Target”。目标id应该是其他三个表(实体)主id的组合。目标也有一个int标记。员工应该有一系列目标。SQL如下所示: 这个SQL工作正常,它允许我每个role_id(员工)多个目标,只要应用程序和项目分类不同。 这是目标ID类 这是目标类 这是employee类,我想在其中为每个员工存储一组目标。 通过h

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