我有一个需要通过一个宁静的服务公开的资源。 我希望它有多个资源修订版(每次更新时)。我有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的自动增量。这会是一个更好的方法吗?
答案 0 :(得分:0)
我认为你需要做一个黑客来支持这个场景,因为mysql(也不是JPA)支持这个,
hack如下:你需要一个只有on autoincrement列的表,并将它映射到一个实体(让我们称之为SomeEntityIdGenerator
)。此实体将为您提供id
SomeEntity
字段。
然后从SomeEntity
开始,您需要更改复合键,使其与ManyToOne
建立SomeEntityIdGenerator
的关系。
我并不是说这很漂亮(因为它非常难看),但我认为这是使用普通JAP / SQL实现它的唯一方法。可能有使用触发器的替代方案,但您仍然需要额外的表作为sequence
。