2016-07-05 4 views
0

Ich habe versucht, GUID/UUID in MySQL mit Hibernate zu erzeugen. Unten ist der gleiche Code: Kann mir bitte jemand vorschlagen, wo ich falsch liege.Ich konnte UUID generieren, konnte aber nicht in die Datenbank einfügen

 public class MainClassLists { 
     public static void main(String[] args){ 

     Configuration configuration = new Configuration().configure(); 
     ServiceRegistryBuilder registry = new ServiceRegistryBuilder(); 
     registry.applySettings(configuration.getProperties()); 
     ServiceRegistry serviceRegistry = registry.build(); 
     SessionFactory sessionFactory = configuration.buildSessionFactory(serviceRegistry); 

     Session session = sessionFactory.openSession(); 
     Users userNew = new Users(); 
        userNew.setUserName("StyuytSra"); 
     userNew.setPassword("pyuass"); 
     userNew.setFirstName("sryuyaxcva"); 
     userNew.setLastName("sayuynxca"); 
     userNew.setBirthDate("2000-08-12"); 
     userNew.setGender("f"); 
     userNew.setEmailId("[email protected]");   
     userNew.setPhoneNumber(92672); 
     userNew.setAccountNumber(8878); 
     userNew.setAddress1("add1"); 
     userNew.setAddress2("add2"); 
     userNew.setCity("SD"); 
     userNew.setCountry("US"); 
     userNew.setZipcode(765); 
     session.beginTransaction(); 
     session.save(userNew); 
     Serializable uid= session.getIdentifier(userNew); 

     System.out.println("User ID : "+userNew.getUserId()+""+uid); 
       System.out.println(); 
     session.close(); 
     System.exit(0); 
    } 
    } 

Entitätsklasse:

@Entity 
    @Table(name = "users", catalog = "test", schema = "") 
public class Users implements Serializable { 
    @Id 
@Column(name = "user_id") 

@GeneratedValue(generator = "GUID") 
@GenericGenerator(name = "GUID", strategy = "com.List_Test.mainClass.InquisitiveUUIDGenerator") 

private String userId; 
@Basic(optional = false) 
@Column(name = "user_name", unique = true) 
private String userName; 
@Basic(optional = false) 
@Column(name = "password") 
private String password; 
@Basic(optional = false) 
@Column(name = "first_name") 
private String firstName; 
@Basic(optional = false) 
@Column(name = "last_name") 
private String lastName; 
@Column(name = "birth_date") 
private String birthDate; 
@Column(name = "gender") 
private String gender; 
@Column(name = "email_id", unique = true) 
private String emailId; 
@Column(name = "phone_number") 
private Integer phoneNumber; 
@Column(name = "account_number", unique = true) 
private Integer accountNumber; 
@Column(name = "address_1") 
private String address1; 
@Column(name = "address_2") 
private String address2; 
@Column(name = "city") 
private String city; 
@Column(name = "state") 
private String state; 
@Column(name = "zipcode") 
private Integer zipcode; 
@Column(name = "country") 
private String country; 
public String getUserId() { 
    return userId; 
} 

public void setUserId(String userId) { 
    this.userId = userId; 
} 

public String getUserName() { 
    return userName; 
} 

public void setUserName(String userName) { 
    this.userName = userName; 
} 

public String getPassword() { 
    return password; 
} 

public void setPassword(String password) { 
    this.password = password; 
} 

public String getFirstName() { 
    return firstName; 
} 

public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 

public String getLastName() { 
    return lastName; 
} 

public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 

public String getBirthDate() { 
    return birthDate; 
} 

public void setBirthDate(String birthDate) { 
    this.birthDate = birthDate; 
} 

public String getGender() { 
    return gender; 
} 

public void setGender(String gender) { 
    this.gender = gender; 
} 

public String getEmailId() { 
    return emailId; 
} 

public void setEmailId(String emailId) { 
    this.emailId = emailId; 
} 

public Integer getPhoneNumber() { 
    return phoneNumber; 
} 

public void setPhoneNumber(Integer phoneNumber) { 
    this.phoneNumber = phoneNumber; 
} 

public Integer getAccountNumber() { 
    return accountNumber; 
} 

public void setAccountNumber(Integer accountNumber) { 
    this.accountNumber = accountNumber; 
} 

public String getAddress1() { 
    return address1; 
} 

public void setAddress1(String address1) { 
    this.address1 = address1; 
} 

public String getAddress2() { 
    return address2; 
} 

public void setAddress2(String address2) { 
    this.address2 = address2; 
} 

public String getCity() { 
    return city; 
} 

public void setCity(String city) { 
    this.city = city; 
} 

public String getState() { 
    return state; 
} 

public void setState(String state) { 
    this.state = state; 
} 

public Integer getZipcode() { 
    return zipcode; 
} 

public void setZipcode(Integer zipcode) { 
    this.zipcode = zipcode; 
} 

public String getCountry() { 
    return country; 
} 

public void setCountry(String country) { 
    this.country = country; 
} 
} 

ID-Generator Klasse:

public class InquisitiveUUIDGenerator extends UUIDGenerator { 

private String entityName; 

public void configure(Type type, Properties params, Dialect dialect) { 
    entityName = params.getProperty(ENTITY_NAME); 
    super.configure((org.hibernate.type.Type) type, params, dialect); 
} 

@Override 
public Serializable generate(SessionImplementor session, Object object) { 
    Serializable id = session 
      .getEntityPersister(entityName, object) 
      .getIdentifier(object, session); 

    if (id == null) { 
     return super.generate(session, object); 
    } else { 
     return id; 
    } 
} 
} 

Außerdem habe ich versucht, Daten mit einem Trigger vor dem Einsetzen in MySQL Datenbank für die Benutzer-Tabelle und versuchte Mapping Einfügen es zu der Entitätsklasse. Ich habe es abgebildet, aber der Schlüssel @NaturalId (eindeutig), für den ich dem Generator einen Schlüssel gebe, ist nicht eindeutig. Daher werden doppelte Zuordnungen generiert. Ich bin verwirrt, was ist der richtige Weg zum Generieren von GUID oder UUIDs. Schätze, wenn mir jemand ein Beispiel geben kann. Unterhalb des ID-DB-Skripts für die Tabelle

Die bereitgestellten Codes werden kompiliert und erfolgreich ausgeführt. Die ID wird generiert, aber nicht in die Datenbanktabelle eingefügt. Ausgabe wird in etwa so aussehen: ‚Benutzer-ID: ab9ffdb1-67ba-4d14-9038-3901d5032ab5ab9ffdb1-67ba-4d14-9038-3901d5032ab5‘

+0

Viele dieser String-Grenzen sind wirklich viel zu eng und scheinen völlig zufällig. 25 Buchstaben für einen Namen reichen nicht aus, wie 50 für eine Adresse, aber 100 für ein Geburtsdatum scheint viel zu groß. Verwenden Sie ein "DATE" -Feld dafür. Die meisten Spalten sollten 'VARCHAR (255)' als Standard sein, es sei denn, Sie haben einen wirklich zwingenden Grund. Ebenso wird die Verwendung von "int" für eine Postleitzahl nichts als Ärger sein: "10001-1010" ist eine gültige US-Postleitzahl. Es ist besser, die Dinge offen zu lassen, als unnötig zu klemmen und Daten zu kürzen. – tadman

+0

Vielen Dank für Ihren Vorschlag. wird eine Standard-Zeichenlänge festlegen. – user5876453

Antwort

0

Statt eine separate Klasse von mit UUID zu erzeugen (wie in meiner Frage erwähnt) Ich habe unten Annotationen verwendet, die ich in anderen Stack-Overflow-Antworten gefunden habe. Ich habe es früher versucht, aber nicht funktioniert, weil ich vergessen habe zu beginnen und zu beenden und die Session-Transaktion zu begehen. obwohl es GUID erzeugte, wurde es nicht in der Datenbank gespeichert. Ich musste die Transaktion durchführen, um sie zu speichern. Der folgende Code sollte für die ID kommentiert werden.

@Id 
@GeneratedValue(generator = "system-uuid") 
@GenericGenerator(name = "system-uuid", strategy = "org.hibernate.id.GUIDGenerator") 
@Column(name = "user_id", unique = true) 
Verwandte Themen