2017-12-22 4 views
2

Ich habe den folgenden Code. Da der Wert @Id sequenziell in meinem MariaDB generiert wird, ist es nicht sicher: Ich muss es in den Clients verfügbar machen. Deshalb möchte ich eine unvorhersehbare zufällige @Id. Wie sollte ich den Code ändern?Generieren Sie unvorhersehbare zufällige @Id für Entität

@Entity 
public class Item implements Serializable { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; // Automatic generated value 

    // other fields, getters, setters & constructors 
} 
+0

Vielleicht das? https://stackoverflow.com/questions/6356834/using-hibernate-uuidgenerator-via-annotations –

Antwort

3

Wenn Sie nicht zufrieden mit Standard-Generatoren, können Sie Ihren eigenen Generator in folgenden Weise definieren;

@Entity 
public class Item implements Serializable { 

    @Id 
    @GeneratedValue(generator = MyGenerator.generatorName) 
    @GenericGenerator(name = MyGenerator.generatorName, strategy = "a.b.c.MyGenerator") 
    private String id; 

    // rest of the entity 
} 

Und der Generator selbst;

public class MyGenerator implements IdentifierGenerator { 

    public static final String generatorName = "myGenerator"; 

    @Override 
    public Serializable generate(SharedSessionContractImplementor sharedSessionContractImplementor, Object object) throws HibernateException { 
     return UUID.randomUUID().toString().replace("-", ""); 
     // or any other logic you'd like for generating unique IDs 
    } 
} 
+1

Danke. Ihre Lösung scheint zufällige IDs bereitzustellen. Ich habe den Code des Generators mit den Vorschlägen in dieser Diskussion angepasst: https://stackoverflow.com/questions/41107/how-to-generate-a-random-alpha-numeric-string –

2

Hibernate and UUID identifiers

Die UUID hex Generator sind die ältesten UUID Kennungserzeuger und es unter dem „uuid“ Typ registriert ist. Es kann einen 32 hexadezimalen UUID-String-Wert (es kann auch ein Trennzeichen verwenden) mit dem folgenden Muster erzeugen: 8 {sep} 8 {sep} 4 {sep} 8 {sep} 4.

@GeneratedValue(generator = "uuid") 
@GenericGenerator(name = "uuid", strategy = "uuid") 
@Column(columnDefinition = "CHAR(32)") 
@Id 
private String id; 

Eine Sache von UUID Kennungen, die Arbeit sowohl für MySQL (GenerationType.IDENTITY) und Oracle (GenerationType.SEQUENCE) für Hibernate Autoschlüsselgenerierung als eine Entity-Klasse.

Advantages and disadvantages of GUID/UUID database keys

+0

Danke. Allerdings bietet diese Lösung IDs, die nicht zu zufällig sind. Zum Beispiel erhielt ich diese zwei Id, die ziemlich ähnlich sind: "8180828f607e1ab401607ef58ec90000" und "8180828f607e1ab401607ef83e910001". Auch der dritte ist ähnlich: "8a80828f607e1ab401607efd76e20002". –

Verwandte Themen