Hibernate实体具有主要ID和修订版ID

时间:2015-07-26 16:47:36

标签: java mysql hibernate jpa

我有一个需要通过一个宁静的服务公开的资源。 我希望它有多个资源修订版(每次更新时)。我有id(资源ID)和subid(修订版ID)

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

post here中,我尝试使用自动增量资源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的额外列连接,允许在create上获取指定的id。

是否有关于编写自定义SelectGenerator以获得增量ID和subid目的的可用信息?

如果我放弃了id的自动增量。这会是一个更好的方法吗?

1 个答案:

答案 0 :(得分:0)

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

hack如下:你需要一个只有on autoincrement列的表,并将它映射到一个实体(让我们称之为SomeEntityIdGenerator)。此实体将为您提供id SomeEntity字段。

然后从SomeEntity开始,您需要更改复合键,使其与ManyToOne建立SomeEntityIdGenerator的关系。

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