在持續存在之前,沒有辦法檢索標識符 - 只是因爲它沒有標識符,除非您堅持實體。這與你的策略無關。這與同時發生有關。
但是你可以添加自己的臨時密鑰爲您的使用情況:
@Entity
public class Person {
private static final AtomicLong counter = new AtomicLong();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private final transient long tempId = counter.decrementAndGet();
public long getIdForComparison() {
return id == null ? tempId : id;
}
}
記住counter
將減少爲每個創建的對象 - 即使是那些由JPA提供商實例化。如果你想只計算新的(非持久)對象,或擔心原子計數器的時候,你應該使用不同的構造函數JPA:
@Entity
public class Person {
private static final AtomicLong counter = new AtomicLong();
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private transient long tempId;
private String name;
protected Person() {
// Constructor for JPA - nothing to do, the id will get attached
}
public Person(String name) {
// Constructor for creation of new objects
tempId = counter.decrementAndGet();
this.name = name;
}
public long getIdForComparison() {
return id == null ? tempId : id;
}
}
嗨托比亞斯感謝您的迴應,我心中有類似的東西,我只是想檢查是否有任何東西從jpa implmentations準備! – fruscian