Java Hibernate在将UUID用作主键时获取错误的ID值
我的实体:Java Hibernate在将UUID用作主键时获取错误的ID值,java,spring,hibernate,spring-data,Java,Spring,Hibernate,Spring Data,我的实体: @Entity @Table(name = "eh_portal") public class PortalEntity { @Id @Column(name = "id", columnDefinition = "CHAR(36)") private UUID id; //java.util.UUID; @Column(name = "name") private String name; @Column(name = "url
@Entity
@Table(name = "eh_portal")
public class PortalEntity {
@Id
@Column(name = "id", columnDefinition = "CHAR(36)")
private UUID id; //java.util.UUID;
@Column(name = "name")
private String name;
@Column(name = "url")
private String url;
// -- Constructor for Hibernate --
protected PortalEntity() {
}
// -- Constructor for new entity in service code --
public PortalEntity(final UUID id) {
this.id = id;
}
.... getters and setters ommited
}
Respository是Spring数据JPA:
public interface PortalRepository extends CrudRepository<PortalEntity, UUID> {
}
问题是,Hibernate返回的数据显然是错误的——请参见下面的屏幕截图
Mysql工作台:
通过Spring数据JPA获取实体的实际网页:
您可以看到UUID明显不同,而其他列是正确的。
这里怎么了?(Spring 4、Hibernate 4、Spring DATA JPA、Mysql 5)尝试使用
@Type(Type=“uuid char”)
这是真的错误还是仅仅是屏幕上的输出。可能是一个简单的呈现/转换问题。。另外,您正在打印什么,直接打印ID还是使用转换器,我还想知道hibernate是否本机支持UUID到字符串和反向转换,或者您是否需要转换器。我已经调试了返回的实体。这在实体级别是错误的。当我的实体无法加载其子实体时,这解决了我的问题。您能解释一下为什么这样做有效和/或必要吗?谢谢
CREATE TABLE `eh_portal` (
`id` char(36) NOT NULL COMMENT 'UUID',
`name` varchar(255) NOT NULL,
`url` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `url_UNIQUE` (`url`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8