Under Oracle, and possibly other DBs, if you dont specify a constraint name for primary keys, check and unique constraints Oracle creates a system default name which is no help to anyone hitting the DB if the violate the constraint.
It would be nice to be able to generate SQL along the lines of:
CREATE TABLE foo
id number(19,0) not null,
a integer not null,
b integer not null,
CONSTRAINT PK_foo PRIMARY KEY (ID),
CONSTRAINT CK_A_NONZERO CHECK ( a > 0 ),
CONSTRAINT CK_B_NONZERO CHECK ( b > 0 )
where the PK name for the <id> element can be set by attribute (similar to how the foreign-key name can be set).
For check constraints, maybe an additional attribute check-name=""
could be added
Ive implemented the PK name for <id> elements, but now notice there are additional PKs created by Hibernate. The check constraint seems a little more involved, but I was thinking about derriving a new class, CheckConstraint from Constraint, and having the value from the existing check attribute stored, and also a constraintName.
The individual dialects could then have a new getCreateConstraintSQL method to switch this out for the different DBs.