[
https://hibernate.onjira.com/browse/HHH-5429?page=com.atlassian.jira.plug...
]
Fabien Marsaud edited comment on HHH-5429 at 2/21/12 8:31 PM:
--------------------------------------------------------------
I believe this issue is not a regression and that it can be closed: Hibernate now simply
abides by
http://db.apache.org/derby/docs/10.6/ref/rrefsqlj37836.html ID generation.
Let's assume your entities are declared with:
@javax.persistence.Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() { return id; }
At the time of Hibernate 3.3, if your DB was created using the output of
configuration.generateSchemaCreationScript(new DerbyDialect()), you must have got some
HIBERNATE_UNIQUE_KEY table which acted as a sequence for Hibernate to fill entities'
IDs before INSERT. With Hibernate 3.5+ the DDL statements would contain "generated by
default as identity" next to each PK declaration.
In other words, now, Hibernate has a good reason *not* to fill the ID of entities to be
inserted: it considers Derby should manage them instead. If you want to keep your Derby
IDs as they *were* (without generated identity), just fill the ID column yourself before
INSERT. We could have the same discussion with non-autoincremented MySQL tables PKs.
To fix, you may want to export data, drop contraints+tables, regenerate creation script,
check it contains "generated always/by default as identity", create tables,
re-insert data, restore constraints, enjoy.
was (Author: fabmars):
I believe this issue is not a regression and that it can be closed: Hibernate now
simply abides by
http://db.apache.org/derby/docs/10.6/ref/rrefsqlj37836.html ID
generation.
Let's assume your entities are declared with:
@javax.persistence.Id
@GeneratedValue(strategy = GenerationType.AUTO)
public Long getId() { return id; }
At the time of Hibernate 3.3, if your DB was created using the output of
configuration.generateSchemaCreationScript(new DerbyDialect()), you must have got some
HIBERNATE_UNIQUE_KEY table which acted as a sequence for Hibernate to fill entities'
IDs before INSERT. With Hibernate 3.5+ the DDL statements would contain "generated by
default as identity" next to each PK declaration.
In other words, now, Hibernate has a good reason *not* to fill the ID of entities to be
inserted: it considers Derby should manage them instead. If you want to keep your Derby
IDs as they *were* (without generated identity), just fill the ID column yourself before
INSERT. We could have the same with non-autoincremented MySQL tables PKs.
To fix, you may want to export data, drop contraints+tables, regenerate creation script,
check it contains "generated always/by default as identity", create tables,
re-insert data, restore constraints, enjoy.
[regression] unable to persist entity using derby 10.6.1.0 and
hibernate 3.5+
-----------------------------------------------------------------------------
Key: HHH-5429
URL:
https://hibernate.onjira.com/browse/HHH-5429
Project: Hibernate ORM
Issue Type: Bug
Components: core
Affects Versions: 3.5.3, 3.5.4, 3.6.0.Beta1
Environment: derby 10.6.1.0 and hibernate 3.5+
Reporter: Max Giesbert
when inserting any kind of entity
@Entity
public class TestObject
{
private Long id;
private String test;
public TestObject(){}
@Id @GeneratedValue(strategy=GenerationType.AUTO)
public Long getId()
{
return id;
}
[...]
i get the following error message
org.hibernate.exception.ConstraintViolationException: could not insert:
[com.mypackage.TestObject]
>>java.sql.SQLIntegrityConstraintViolationException: Column 'ID' cannot
accept a NULL value.
>>org.apache.derby.impl.jdbc.EmbedSQLException: Column 'ID' cannot accept
a NULL value.
>>ERROR 23502: Column 'ID' cannot accept a NULL value.
>> at org.apache.derby.iapi.error.StandardException.newException(Unknown Source)
>> at org.apache.derby.impl.sql.execute.NormalizeResultSet.normalizeColumn(Unknown
Source)
>> at org.apache.derby.impl.sql.execute.NormalizeResultSet.normalizeRow(Unknown
Source)
>> at org.apache.derby.impl.sql.execute.NormalizeResultSet.getNextRowCore(Unknown
Source)
>> at org.apache.derby.impl.sql.execute.DMLWriteResultSet.getNextRowCore(Unknown
Source)
>>...
the same code is working fine with versions 3.3.2GA and annotations 3.4.0GA and earlier.
i just switched back...
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira