我实际上是在尝试使用带有java注释的Hibernate ORM进行映射。我使用PostgreSQL作为我的数据库及其UUID类型。正如我在其他帖子上看到的那样,当我想将UUID 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;
}
}
感谢您的帮助
答案 0 :(得分:1)
我猜你应该使用Generator
:
@Id @GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
答案 1 :(得分:0)
如果是xml映射,您可以添加
<typedef class="org.hibernate.type.PostgresUUIDType" name="pg-uuid" />
如https://developer.jboss.org/thread/229747中所述,但我不知道如何使用注释对其进行配置。