具有主id和修订id的Hibernate实体



我有一个需要通过restful服务公开的资源。我希望它有一个资源的多个修订(每次更新)。我有id(资源id)和subbid(修订id)

id 1 subid 0 
id 1 subid 1
id 1 subid 2
id 2 subid 0

在这里的一篇文章中,我尝试了一个自动递增的资源id和一个子id(每次更新时以编程方式递增)表

 CREATE TABLE `SomeEntity` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `subid` int(11) NOT NULL DEFAULT '0',
 PRIMARY KEY (`id`,`subid`),

实体
private long id;
private int subid;
@Id
@Column(name = "id")
public long getId() {
    return id;
  }
  @Id
  @Column(name = "subid")
  public int getSubid() {
    return subid;
  }

一个可用的解决方案是有一个额外的列连接id和subid,允许在创建时获取指定的id

是否有任何关于编写自定义SelectGenerator以实现增量id和subbid目的的信息?

如果我给出id的自动增量。实现这一目标的更好方法是什么?

我认为你需要做一个hack来支持这个场景,因为mysql(也不是JPA)支持这个,

方法如下:您需要一个只有一个自增列的表,并将其映射到一个实体(我们称之为SomeEntityIdGenerator)。该实体将为您提供SomeEntityid字段。

然后从SomeEntity,您需要更改组合键,使ManyToOneSomeEntityIdGenerator的关系。

我并不是说这很漂亮(因为它很丑),但我认为这是使用普通的java/SQL实现它的唯一方法。可能有使用触发器的替代方法,但是您仍然需要额外的表来作为sequence

最新更新