2016-06-03 14 views
0

Ich habe eine Klasse ABC, die eine Variable id enthält, die vom Typ uuid ist und ein Primärschlüssel ist. Ich benutze Postgres, um das Objekt zu speichern, und in meiner DB id ist vom Typ uuid. Wenn ich diesen Code ausführe, erhalte ich folgenden Fehler.Speichern UUID (Primärschlüssel) in Postgres mit Hibernate Dao?

@Entity 
@Table(name = "event", schema = "public", uniqueConstraints = @UniqueConstraint(columnNames = "id")) 
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) 
public class ABC implements java.io.Serializable { 
    @Type(type = "pg-uuid") 
    private UUID id; 

    @GenericGenerator(name = "uuid", strategy = "uuid") 
    @Id 
    @GeneratedValue(generator = "uuid") 
    @Column(name = "id", unique = true, nullable = false) 
    @Type(type = "pg-uuid") 
    public UUID getId() { 
     return this.id; 
    } 

    public void setId(UUID id) { 
     this.id = id; 
    } 
} 

Hauptklasse Mit Objekt von ABC in Postgres Hibernate zu speichern:

ABCDAO dao = new ABCDAO(); 
ABC be = new ABC(); 
Session session = dao.getSession(); 
Transaction tx = null; 
try { 
    tx = session.beginTransaction(); 
    session.save(be); 
    tx.commit(); 
} catch (HibernateException e) { 
    e.printStackTrace(); 
    if (tx != null) 
     tx.rollback(); 
    e.printStackTrace(); 
} finally { 
    session.close(); 
} 

Der Fehler:

org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.istarindia.apps.dao.IstarEvent.id 
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:119) 
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.setIdentifier(AbstractEntityTuplizer.java:384) 
    at org.hibernate.persister.entity.AbstractEntityPersister.setIdentifier(AbstractEntityPersister.java:4555) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:182) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:135) 
    at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208) 
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151) 
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78) 
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:772) 
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:746) 
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:750) 
    at istar.TestDB.main(TestDB.java:105) 
Caused by: java.lang.IllegalArgumentException: argument type mismatch 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:65) 
    ... 11 more 
org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of com.istarindia.apps.dao.IstarEvent.id 
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:119) 
    at org.hibernate.tuple.entity.AbstractEntityTuplizer.setIdentifier(AbstractEntityTuplizer.java:384) 
    at org.hibernate.persister.entity.AbstractEntityPersister.setIdentifier(AbstractEntityPersister.java:4555) 
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:182) 
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:135) 
    at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208) 
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151) 
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78) 
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:772) 
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:746) 
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:750) 
    at istar.TestDB.main(TestDB.java:105) 
Caused by: java.lang.IllegalArgumentException: argument type mismatch 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:498) 
    at org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:65) 
    ... 11 more 

Antwort

0

wurde beschlossen, den Getter, Setter und Anmerkungen wie folgt geändert

@javax.persistence.Id 
@GenericGenerator(name = "uuid-gen", strategy = "uuid2") 
@GeneratedValue(generator = "uuid-gen") 
@org.hibernate.annotations.Type(type="pg-uuid") 
public UUID getId() { 
    return id; 
} 

public void setId(UUID value) { 
    this.id = value; 
} 
Verwandte Themen