Oracle Char type and Hibernate

2019-04-04 08:42发布

问题:

I have a oracle table which contains char(n) type for several columns. I use hibernate tools to create entities objets and this tool map char type in String.

But when I deploy my application, I get an error because Hibernate wait a varchar2 type and not a char type:

Wrong column type in ARBOR.CMF for column CHG_WHO. Found: char, expected: varchar2(30 char)

What kind of java type must I use to map char(n) type in an entity ?

Thanks.

回答1:

There's some useful information here on this blog entry.

Essentially you need to make your hibernate configuration more specific, as it's assuming a default String mapping to varchar2(30).

You can try using the database-agnostic annotation of @Column(length=N) (where N is the actual length of your column in the database). If that doesn't work, try using the @Column(columnDefinition = "char") approach.



回答2:

Doesn't work - fails Hibernate schema validation:

@Column(name="ENABLED_FLAG", length=1)
private String enabledFlag;

Does work, since the columnDefinition attribute tells Hibernate not to default to VARCHAR2 as the column type, and to use CHAR instead:

@Column(name="ENABLED_FLAG", length=1, columnDefinition="CHAR")
private String enabledFlag;

The column in the database is defined as:

ENABLED_FLAG CHAR(1 BYTE)