1

我实际上是在尝试使用带有 java 注释的 Hibernate ORM 进行映射。我将 PostgreSQL 用于我的数据库及其 UUID 类型。正如我在其他帖子中看到的那样,当我想将 UUID pgsql 类型映射到 UUID Java 类型时,我应该将 @Type(type="pg-uuid") 添加到每个 UUID 字段。问题是当我得到这个时,它似乎没有被休眠识别:

org.hibernate.MappingException:无法确定类型:pg-uuid,在表:ev_session,列:[org.hibernate.mapping.Column(user_id)]

我在谷歌上找不到任何提到这一点的东西,所以我真的不知道应该去哪里看。

这是我的映射类。该表使用两个 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 回答