複合主キーをクラスに追加しようとしていますが、少し問題があります。これがクラスです。
class User {
    private long id;
    ...
}
class Token {
    private User user;
    private String series;
    ...
}
クラスをマップするためにorm.xmlを使用しています。これは、クラスが実際にはJPAに依存したくない高レベルのAPIの一部であるためです。これには、いくつかの実装があります。
ここにあります:
...
<entity class="User">
    <attributes>
        <id name="id">
            <generated-value strategy="AUTO"/>
        </id>
        ...
    </attributes>
</entity>
<entity class="Token">
    <id-class class="TokenPK"/>
    <attributes>
        <id name="series"/>
        <id name="user"/>
        <many-to-one name="user"/>
    </attributes>
</entity>
最後に、すべてを機能させるために、TokenPKクラスを作成しました。これは次のようになります。
public class TokenPK implements Serializable {
    private String series;
    private User user;
    public TokenPK() {
    }
    public TokenPK(String series, User user) {
        this.series = series;
        this.user = user;
    }
    public String getSeries() {
        return series;
    }
    public void setSeries(String series) {
        this.series = series;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        RememberMeTokenPK that = (TokenPK) o;
        if (!series.equals(that.series)) return false;
        if (!user.equals(that.user)) return false;
        return true;
    }
    @Override
    public int hashCode() {
        int result = series.hashCode();
        result = 31 * result + user.hashCode();
        return result;
    }
}
私が抱えている問題は、Hibernateがmysqlテーブルを作成できないことを不平を言っていることです。これは、「BLOB/TEXT列」の「user」がキーの長さのないキー仕様で使用されているためです。
私の問題は、実際には、列が最初にBLOBとして格納されていることです。id-classを入れるまでは問題なく動作していましたが、ユーザーはそのidを介してリンクされていました。Hibernateに主キーとして使用していたユーザーのIDのlong値を使用させるにはどうすればよいですか?
更新されたorm.xml:
<entity class="Token">
    <id-class class="TokenPK"/>
    <attributes>
        <id name="series"/>
        <id name="user">
            <column name="userId"/>
        </id>
        <many-to-one name="user">
            <join-column name="userId" insertable="false" updatable="false"/>
        </many-to-one>
    </attributes>
</entity>