私は実際に、マッピング用の 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;
}
}
ご協力いただきありがとうございます