Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

JPA/Hibernate DDL generation; CHAR vs. VARCHAR

I have a JPA/Hibernate data model that I am using the Hibernate hbm2ddl tool to generate database DDL. I have some strings that should be CHAR and some that may be VARCHAR in the database. I want to minimize hand editing of the DDL (I realize that some will have to happen).

Anyone know how I should go about this? I realize that I can make all Strings VARCHARS or CHARS via a hacked dialect, but that isn't what is always appropriate in the database.

I would like to be able to do this with annotations or aop, avoiding custom column definition text in my classes.

Thanks.

like image 468
Jeff Walker Avatar asked Feb 18 '10 17:02

Jeff Walker


2 Answers

Annotate the strings you want to map to a CHAR in the database with @Column(columnDefinition="CHAR(<your-char-length>)").

like image 98
Markus Knittig Avatar answered Sep 20 '22 13:09

Markus Knittig


So, I finally found that you can specify a length limit for a type in the dialect. So, I've decided that anything under a length of 10 should be char and anything over that should be varchar:

registerColumnType( Types.VARCHAR, 10, "char($l)" );

That isn't exactly what I was wanting, but that is good enough. Sad that I didn't find that earlier.

like image 34
Jeff Walker Avatar answered Sep 19 '22 13:09

Jeff Walker