一尘不染

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

hibernate

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

@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个位置,但是每个位置有很多时间。

任何帮助将不胜感激=)


阅读 338

收藏
2020-06-20

共1个答案

一尘不染

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

在测试中让Hibernate做事情。

2020-06-20