2017-06-01 4 views
0

Ich habe Situation, auf der ich versuchen, Entität mit ID, die auf den maximalen ID-Wert abhängt persistent, zum Beispiel die neue Entity-ID wird MAX (ID) +1. jetzt versuche ich, JPA zu verwenden, um diese EinheitHibernate @Id @GeneratedValue mit nicht auto-increment und ich habe keine Sequenz

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

    @Id 
    @GeneratedValue 
    private String id; 

i strategy = GenerationType.AUTO verwendet, um weiterhin bestehen, strategy = GenerationType.IDENTITY, strategy = GenerationType.SEQUENCE, strategy = GenerationType.TABLE keiner von ihnen arbeiten, so dass ich glaube, ich es durch die Auswahl der max id lösen kann dann +1 und verwenden, die Wert (ich habe es nicht versucht), wonach ich frage, gibt es eine Möglichkeit, diese Situation durch JPA oder Hibernate zu behandeln. Hinweis: Die ID-Spalten sind nicht automatisch inkrementell und die Datenbank hat keine Sequenz.

+1

es funktioniert nicht, weil es ein String ist. Wenn Sie ein Long verwenden, sollte 'GenerationType.AUTO' funktionieren. https://stackoverflow.com/questions/10100970/how-to-generate-a-hibernate-id-with-auto-generate-with-a-starting-value – XtremeBaumer

+0

@XtremeBaumer hat nicht funktioniert –

+1

Vielleicht diese https://stackoverflow.com/questions/18622716/how-to-use-id-with-string-type-in-jpa-hibernate – Rjiuk

Antwort

1

Verwenden Sie keine Zeichenfolge als Primärschlüssel. Wenn Sie ID wie "ABC123" benötigen, dann nehmen Sie 2 ID-Spalten. Eins als ID (int) PK, zweites als display_id (String). Sie können die display_id auf Datenbankebene automatisch mit dem Trigger generieren.

+0

Ich versuchte lange, aber nicht funktioniert –

+0

Bitte verstehen Sie das Problem. Wie kannst du Max (id) bekommen, wenn du id als String nimmst? –

+0

Ich verstehe das Problem, ich möchte nicht Max (ID) verwenden, das ist, wie das SQL von einem anderen geschrieben wird. Ich versuche herauszufinden, Lösung.Ich habe bereits die ID so lange und Strategie = GenerationType.AUTO, hat nicht funktioniert –

1

Wenn Sie String als einen Typ Ihrer ID verwenden, sollten Sie keine automatische Erhöhung verwenden Ursache String ist etwas, das nicht inkrementiert werden kann, da es kein Zahlentyp ist. Lass einfach @Id und füge @GeneratedValue(generator = "uuid") hinzu - das sollte funktionieren. Zusätzlich können Sie hinzufügen @GenericGenerator(name = "uuid", strategy = "uuid2")

Verwandte Themen