java - 具有主 ID 和修订 ID 的 Hibernate 实体

标签 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 列串联,它允许在创建时获取分配的 id。

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

如果我放弃 id 的自动增量。实现此目标的更好方法是什么?

最佳答案

我认为你需要进行一些修改来支持这种情况,因为 mysql(也不 JPA)支持这种情况,

黑客如下:您需要一个仅包含自动增量列的表,并将其映射到一个实体(我们称之为 SomeEntityIdGenerator)。该实体将为您提供 SomeEntityid 字段。

然后,您需要从 SomeEntity 更改组合键,以便与 SomeEntityIdGenerator 建立 ManyToOne 关系。

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

关于java - 具有主 ID 和修订 ID 的 Hibernate 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31639487/

相关文章:

java - 如何在没有动画的情况下关闭应用程序

php - 关于转义用户提交的 html、javascript 和 PHP 内容的概述和流程图

mysql - 如何在查询中仅乘以一行?

java.lang.IllegalStateException异常

java - hibernate一级缓存,直接在DB修改记录

java - 实现 'Comparable' 时如何定义排序顺序?

java - Hibernate-search 5.0 空间 - 不确定它是否在哈希中存储纬度/经度

c# - 为什么entity framework+mysql provider枚举返回部分结果无一异常(exception)

hibernate - 如何在 Spring Data JPA 中使用多个 JPA 持久性上下文?

java - 为什么 Spring DeferredResult 在我的应用程序中串行执行?