我正在使用JPA的EclipseLink实现,我遇到了问题 .
这是我的实体类:
@Entity
@Table(name = "attendances")
public class Attendance implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Short id;
....
在我的MySQL表(即底层数据存储)中,我也设置了 auto_increment
标志 .
How can I get the auto-generated value (id field) before persisting the entity? 因此,如果表中有3个实体( id IN (1, 2, 3)
),我希望得到4作为下一个自动生成的值 .
我唯一的解决方法是:
- 获取具有最大
id
字段的实体的ID .
这就是我所能做的一切吗?
1 回答
你可以尝试这个,如果使用JPA 2.0,
DISCLAIMER: 从未尝试过 .
否则,您可以将您的ID生成策略更改为某些内容,可以在持久化实体之前获取
id
. 例如,尝试使用表生成器生成id
. 在这里,我找到了一个例子,Use Table Generator To Generate ID . 然后,您将能够直接从该表中读取值 . 您可能无法使用@Id
自动处理此问题,您最终将自己计算下一个id
. 因此,您可以使用相同的想法,但自己完成所有工作并在创建操作时设置id
,并且不要让JPA生成一个 .或者你可能想使用
sequence
,如果支持的话 . 如果是sequence
,您还需要自己获取下一个值并手动设置 . 准备好在没有插入的情况下松开跳过的id
,或以某种方式处理 .或者你对你正在做的事情很满意 . 只需照顾原子性 . 或者您可能没有同时运行多个事务的情况 .