6

複合主キーの列の順序に問題があります。以下を含むテーブルがあります。

@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 をサブクラス化すると、休止状態でデータベースとテーブルがエラーなしで作成されます。問題は、休止状態が、私が望むのとは逆の順序で列を持つ複合主キーを生成していることです。

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 個の loc を持つことがわかっているので、各 loc のエポックタイムは多くなります。

どんな助けでも大歓迎です=)

4

2 に答える 2

0

これを行う方法はないと思います。私にできることは、お持ちの SQL create ステートメントを使用して (正しい順序に変更して)、本番環境で手動で実行することをお勧めすることだけです。

テストでは、Hibernate にその機能を実行させます。

于 2011-11-15T17:21:46.110 に答える