Exceptions during persisting an entity
hoeft Nov 16, 2006 5:40 AMHi!
I use JBOSS 4.0.5GA and get always following exception:
11:06:47,445 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: null 11:06:47,445 ERROR [JDBCExceptionReporter] failed batch 11:06:47,445 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43) at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:249)
... and I don't know why :-(.
My local client Code:
public void testMessage() throws Throwable { TestStarterRemote testStarter = getTestObject(); // build messages for (int i = 0; i < 10; i++) { Message msg = new Message(); // add properties to each message Set<Propertie> properties = new HashSet<Propertie>(); for (int n = 0; n < 2; n++) { //i must set the id here, because I want to insert the property //into a hashset properties.add(new Propertie(n, "key" + n, "value" + n)); } msg.setHeaderProperties(properties); // if i==1: an error is being thrown here msg = testStarter.merge(msg); } }
The message class:
@Entity @Inheritance(strategy = InheritanceType.JOINED) public class Message extends EntityWithIntId implements Serializable { private static final long serialVersionUID = 1L; private Set<Propertie> headerProperties = new HashSet<Propertie>(); private long id; @Id @GeneratedValue(strategy = GenerationType.AUTO) public long getId() { return id; } public void setId(long id) { this.id = id; } public Message() { } @OneToMany(cascade = { CascadeType.ALL }, fetch = FetchType.EAGER) public Set<Propertie> getHeaderProperties() { return headerProperties; } public void setHeaderProperties(Set<Propertie> properties) { this.headerProperties = properties; }}
My property class:
@Entity public class Propertie extends EntityWithIntId implements Serializable { private static final long serialVersionUID = 1L; private String key; private Serializable value; private long id; public Propertie() { } public Propertie(long id, String key, Serializable value) { super(); this.setKey(key); this.setValue(value); this.setId(id); } @Id @GeneratedValue(strategy = GenerationType.AUTO) public long getId() { return id; } public void setId(long id) { this.id = id; } (...) }
And now, maybe the root of all my problems, the base class:
public abstract class EntityWithIntId { public abstract long getId(); /** * two entities are equal if they have the same class and the same id * * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (obj == null || !obj.getClass().equals(this.getClass())) { return false; } EntityWithIntId tmp = (EntityWithIntId) obj; return tmp.getId() == this.getId(); } @Override public int hashCode() { return new Long(this.getId()).hashCode(); }
I set the id of the each properties object in my client. The id is autmatically generated if the propertie is persisted. Is that the root of my problem. Has hibernate a problem with that?
Thanks for your help
Meinert