【发布时间】:2021-05-24 10:33:59
【问题描述】:
我的实体有一个这样的包装标识符,
@Entity
public class Article {
@EmbeddedId
private ArticleId articleId;
....
}
@Embeddable
public class ArticleId implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name="id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
}
在我的架构中,多个应用程序实例(都一样。)连接到同一个数据源
所以@GeneratedValue(strategy = GenerationType.IDENTITY)似乎不错
因为即使实例 A 和 B 尝试同时创建 Account,其 Id 也是由数据库保证的。
问题是@GeneratedValue只能与@Id注解一起使用(@Id不适用于EmbeddedId)
PersistenceUnitUtil.getIdentifier(Object entity) 可以替代吗?像这样,
ArticleId articleId = ArticleRepository.nextIdentity();
我不确定这是否会导致竞态条件。PersistenceUnitUtil.getIdentifier(Object entity) 能否保证跨不同应用程序实例(JVM)的唯一 ID?我不这么认为。
在这种情况下,有什么选择?
【问题讨论】:
-
也许this 会有所帮助。
标签: java hibernate jpa spring-data-jpa