[高分求助]请问JPA中使用UUID可以用作复合主键吗?

InterRonaldo 2011-09-09 03:46:02
近期在一个项目中使用了 Hibernate3 + Spring + Jpa `1.0 的框架技术

其中有一个复合键中的实体中打算使用 UUID生成其中的一个键,实体代码如下


@Entity
@IdClass(FolderPrimaryKey.class)
@Table(name = "folder")
public class FolderEntity implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
@Column(name = "folderId", length = 32, nullable = false)
private String folderId;

@Id
@Column(name = "userId", length = 32, nullable = false)
private String userId;


由于只有一个主键 folderId是 uuid 由hibernate框架提供自动生成的,另一个主键(同时也是外键) userId 则是手动赋值的

但是在进行插入表信息的时候 总是提示 folderId字段不能插入 null 值

请问是用了UUID就不可以用复合主键的原因,还是我的实体配置有问题!盼高手解答!
...全文
229 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
InterRonaldo 2011-09-16
  • 打赏
  • 举报
回复
这个问题调查了一下可能有下面两种解释原因,愿与大家共勉。

一 由UUID的定义得出,UUID已经是一个唯一标识符,所以作为单主键应可以唯一标识一条表记录,如果使用复合主键反而显得画蛇添足。(但是不知道为什么hibernate不支持从技术角度实现它)

二 有一些资料上表示,hibernate的主键生成机制是,如果有hibernate内部机制生成的主键,则不能手动赋值(即全部主键都有hibernate生成),否则就需要全部在进行持久化之前手动赋值才可以完成操作。(所以当需要手动赋值的非UUID键作为复合主键出现的时候,就不能单一的用hibernate底层自动生成,只能提前在调用前赋值)

不知道是不是这些原因,希望高手能够提供些思路和更官方的资料,谢谢!
InterRonaldo 2011-09-14
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 liuyuhua0066 的回复:]

@Id
@GenericGenerator(name = "generator", strategy = "uuid.hex")
@GeneratedValue(generator = "generator")
@Column(name = "ID", unique = true, nullable = false, length = 32)
[/Quote]

谢谢 你说的是uuid的实现方法 这里我需要知道的是复合主键的配法
liuyuhua0066 2011-09-11
  • 打赏
  • 举报
回复
@Id
@GenericGenerator(name = "generator", strategy = "uuid.hex")
@GeneratedValue(generator = "generator")
@Column(name = "ID", unique = true, nullable = false, length = 32)
InterRonaldo 2011-09-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wangquanzheng 的回复:]

http://blog.sina.com.cn/s/blog_6988f95a0100t7xx.html

看一下这个,讲的很详细

有关jpa复合主键的
[/Quote]
谢谢楼上的回答 我看了资料 但是我很想找到uuid作为复合主键之一的做法 复合主键我已经可以实现了 谢谢了
安心逍遥 2011-09-09
  • 打赏
  • 举报
回复
http://blog.sina.com.cn/s/blog_6988f95a0100t7xx.html

看一下这个,讲的很详细

有关jpa复合主键的
InterRonaldo 2011-09-09
  • 打赏
  • 举报
回复
大家都没有用过吗?再顶一下!等高手!

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧