2017-06-01 101 views
0

我有我試圖持久實體與ID取決於最大ID值的情況,例如新的實體ID將MAX(id) +1。 現在我嘗試使用JPA堅持這個實體休眠@Id @GeneratedValue與非自動增量,我沒有序列

@Entity 
@Table(name = "product") 
public class ProductDetails { 

    @Id 
    @GeneratedValue 
    private String id; 

我用strategy = GenerationType.AUTOstrategy = GenerationType.IDENTITYstrategy = GenerationType.SEQUENCEstrategy = GenerationType.TABLE他們沒有工作,所以我想我可以通過選擇最大ID,然後在+1和使用解決它是價值(我沒有嘗試)我所要求的是,有什麼辦法通過JPA或Hibernate來處理這種情況。 注意:id列不是自動遞增的,db沒有序列。

+1

它不起作用,因爲它是一個字符串。如果你使用Long,'GenerationType.AUTO'應該可以正常工作。 https://stackoverflow.com/questions/10100970/how-to-generate-a-hibernate-id-with-auto-generate-with-a-starting-value – XtremeBaumer

+0

@XtremeBaumer沒有工作 –

+1

也許這一個https:/ /stackoverflow.com/questions/18622716/how-to-use-id-with-string-type-in​​-jpa-hibernate – Rjiuk

回答

1

不要使用字符串作爲主鍵。如果你需要像「ABC123」這樣的id,那麼需要2個id列。一個是id(int)PK,另一個是display_id(String)。您可以使用觸發器在數據庫級別自動生成display_id。

+0

我試了很久,但沒有工作 –

+0

請理解這個問題。如果你將id作爲String,你怎麼能得到Max(id)? –

+0

我明白這個問題,我不想使用Max(id),也就是說SQL是如何由另一個人編寫的。我試圖找出解決方案。我已經使Id長,戰略= GenerationType.AUTO,沒有工作 –

1

如果您使用String作爲您的Id類型,您不應該使用自動增量原因字符串是不能增加的東西,因爲它不是數字類型。只需保留@Id並添加@GeneratedValue(generator = "uuid") - 應該可以工作。 此外,您可以添加@GenericGenerator(name = "uuid", strategy = "uuid2")