我在复合主键中的列排序遇到麻烦。我有一个包含以下内容的表:
@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做事情。