嗯,我不認爲這會奏效。 JPA自動生成您的ID值,並負責@GeneratedValue
。問問自己'如果已經存在一個ID爲100的實體,會發生什麼情況。我手動創建一個ID爲100'的新實體。直覺上我會說JPA(或實現)引發了一種期待。
在寫上面的回答我得到了寫自己的發電機(在所有沒有嘗試過的想法,只是編碼到這裏的計算器。
你可以通過自己的實現發電機的@GeneratedValue
註釋
@Id
@GeneratedValue(startegy = GenerationType.IDENTITY, generator="generatedIdOrCustomId")
@GenericGenerator(name="generatedIdOrCustomId", strategy="GeneratedIdOrCustomId")
private Long id;
...
而定製的實現應該是這樣的:
public class GeneratedIdOrCustomId extends IdentityGenerator {
@Override
public Serializable generate(SessionImplementor session, Object obj) throws HibernateException {
if (((YourEntity) obj).getId() == null) {
// the id is null, let JPA create an id.
return super.generate(session, obj);
} else {
// the id is set and should not be generated by JPA.
return ((YourEntity) obj).getId();
}
}
的產生m個方法只是一個快速和骯髒的實現。在這種情況下,你必須檢查例如obj == null
並拋出(Hibernate)Exception
。
請解釋一個「長」字段可以如何「未設置」?如果這是一個很長的時間,那麼我可能會理解,但不會太長。 –