我有一个资源需要通过静态服务公开。 我希望它对资源有多个修订版(每次更新时)。我有 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 列串联,它允许在创建时获取分配的 id。
是否有任何关于编写自定义 SelectGenerator 以实现增量 id 和 subid 目的的信息?
如果我放弃 id 的自动增量。实现此目标的更好方法是什么?
最佳答案
我认为你需要进行一些修改来支持这种情况,因为 mysql(也不 JPA)支持这种情况,
黑客如下:您需要一个仅包含自动增量列的表,并将其映射到一个实体(我们称之为 SomeEntityIdGenerator
)。该实体将为您提供 SomeEntity
的 id
字段。
然后,您需要从 SomeEntity
更改组合键,以便与 SomeEntityIdGenerator
建立 ManyToOne
关系。
我并不是说这很漂亮(因为它非常难看),但我认为这是使用普通 JAP/SQL 实现此目的的唯一方法。可能有使用触发器的替代方案,但您仍然需要额外的表才能作为序列
。
关于java - 具有主 ID 和修订 ID 的 Hibernate 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31639487/