1

私は実際に、マッピング用の Java アノテーションを使用して Hibernate ORM を使用しようとしています。データベースとその UUID タイプに PostgreSQL を使用しています。他の投稿で見たように、UUID pgsql 型を UUID Java 型にマップする場合は、すべての UUID フィールドに @Type(type="pg-uuid") を追加する必要があります。問題は、これを取得すると、休止状態によって認識されないように見えることです:

org.hibernate.MappingException: タイプを判別できませんでした: pg-uuid、テーブル: ev_session、列: [org.hibernate.mapping.Column(user_id)]

私はそれについて言及しているGoogleで何も見つけることができないので、どこを見ればいいのか本当にわかりません.

これが私のマップされたクラスです。テーブルは主キーとして 2 つの UUID を使用するため、それを表すネストされたクラスを作成する必要がありました。私がそれを正しくやったかどうかはわかりません。

@Entity
@Table(name="ev_session")
public class SessionDb {

    ////////////////////////
    // VARIABLES
    ////////////////

    @Id
    private PrimaryKey primaryKey;
    @Column(name="date")
    private Date timestamp;

    ////////////////////////
    // NESTED CLASSES
    ////////////////

    @Embeddable
    private class PrimaryKey implements Serializable {
        private static final long serialVersionUID = 7124577164356450734L;

        @Type(type="pg-uuid")
        @Column(name="user_id")
        public UUID userID;
        @Type(type="pg-uuid")
        @Column(name="key")
        public UUID token;
    }

    ////////////////////////
    // CONSTRUCTORS
    ////////////////

    public SessionDb() {
        this.primaryKey = new PrimaryKey();
    }

    ////////////////////////
    // METHODS
    ////////////////

    @Override
    public String toString() {
        return this.primaryKey.token + " associated to " + this.primaryKey.userID + " at " + this.timestamp; 
    }

    ////////////////////////
    // GETTERS/SETTERS
    ////////////////

    public final UUID getUserID() {
        return this.primaryKey.userID;
    }

    public final void setUserID(UUID userID) {
        this.primaryKey.userID = userID;
    }

    public final UUID getToken() {
        return this.primaryKey.token;
    }

    public final void setToken(UUID token) {
        this.primaryKey.token = token;
    }

    public final Date getTimestamp() {
        return timestamp;
    }

    public final void setTimestamp(Date timestamp) {
        this.timestamp = timestamp;
    }

}

ご協力いただきありがとうございます

4

2 に答える 2

1

私はあなたが使用する必要があると思いますGenerator

@Id @GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")

こちらをご覧ください。ここにいくつかのより多くのドキュメント。

于 2013-01-08T15:24:32.547 に答える
0

xml マッピングの場合、追加できます

<typedef class="org.hibernate.type.PostgresUUIDType" name="pg-uuid" />

https://developer.jboss.org/thread/229747で説明されているように、注釈を使用してこれを構成する方法がわかりません。

于 2016-11-04T14:44:44.563 に答える