Hibernate映射 - 无法确定pg-uuid的类型

时间:2013-01-08 15:05:50

标签: java hibernate postgresql mapping uuid

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

  

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;
    }

}

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我猜你应该使用Generator

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

看看here。 更多文档here

答案 1 :(得分:0)

如果是xml映射,您可以添加

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

https://developer.jboss.org/thread/229747中所述,但我不知道如何使用注释对其进行配置。