web-dev-qa-db-fra.com

À quoi Hibernate mappe-t-il un type de données booléen lors de l'utilisation d'une base de données Oracle par défaut?

Par défaut si je crée un champ dans une entité comme:

@NotNull
boolean myBoolean;

Et je laisse Hibernate créer automatiquement mes tables. À quel type de données Oracle cette carte sera-t-elle associée?

31
Peter D

Numéro simple (1)

Si vous le souhaitez, utilisez SchemaExport pour générer un script dans votre base de données cible. Quelque chose comme

AnnotationConfiguration configuration = new AnnotationConfiguration();

configuration
    .addAnnotatedClass(<TYPE_YOUR_CLASS>.class)
    .setProperty(Environment.USER, <TYPE_YOUR_USER>)
    .setProperty(Environment.PASS, <TYPE_YOUR_PASSWORD>)
    .setProperty(Environment.URL, <TYPE_YOUR_URL>)
    .setProperty(Environment.DIALECT, <TYPE_YOUR_DIALECT>)
    .setProperty(Environment.DRIVER, <TYPE_YOUR_DRIVER>);

SchemaExport schema = new SchemaExport(configuration);
schema.setOutputFile("schema.sql");

schema.create(<DO_YOU_WANT_TO_PRINT_TO_THE_CONSOLE>, <DO_YOU_WANT_TO_EXPORT_THE_SCRIPT_TO_THE_DATABASE>);
20
Arthur Ronald

Comme @Arthur l'a dit, il correspond à Number(1) qui serait le bit sql standard où 0 == false Et 1 == true. Comme alternative, vous pouvez mapper char(1) à 'T' ou 'F' comme ceci

@org.hibernate.annotations.Type(type="true_false")
@NotNull
boolean myBoolean;

ou mappez-le sur "Y" ou "N"

@org.hibernate.annotations.Type(type="yes_no")
@NotNull
boolean myBoolean;
55
non sequitor

Voilà ce dont vous avez vraiment besoin

Java POJO :

//@Type(type="true_false") //not working for '1' and '0' in NUMERIC(1) field
@Type(type= "org.hibernate.type.NumericBooleanType")
@NotNull(message="NOT_NULL")
@Column(name = "IS_DELEGATION", nullable = false)
private Boolean isDelegation;

Oracle DDL

alter table agent add (is_delegation number(1) default 0 not null);

Comme indiqué dans Hibernate doc

7
Gilberto Pe-Curto