我正在使用hibernate创建表。在我的实体中,我有以下字段。使用MySQL数据库时,已成功创建此实体。但在Oracle10g上它会抛出错误
create table MetaData (ID bigint not null auto_increment, metaDataId varchar(255) not null, parentId bigint not null, locked bit, userId bigint not null, primary key (ID), unique (metaDataId))
java.sql.SQLSyntaxErrorException: ORA-00907: missing right parenthesis
实体:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorOptions(force = true)
@Table(name = "MetaData", uniqueConstraints = @UniqueConstraint(columnNames = "metaDataId"))
public class MetaData extends SavableEntity {

    @Column(nullable = false)
    private String metaDataId;

    @Column(nullable = false)
    private Long parentId;

    @Column(nullable = false)
    private Long userId;

    @Column
    @Type(type = "boolean")
    private boolean locked;
}

知道怎么回事吗?

最佳答案

如果仔细查看生成的SQL语法,您将认识到字段locked的数据类型及其名称“locked”

create table MetaData (..., **locked bit**, ...)

与数据类型为bigint的字段userId进行比较
create table MetaData (..., **userId bigint not null**, ...)

由于有些数据库没有实现布尔字段,因此您需要编写一些注释来帮助hibernate执行转换。
如果要将布尔值存储为T或F use:
@Type(type="true_false")
private Boolean active;

将它们存储为1或0使用:
@Type(type="boolean")
private Boolean active;

Jake Trent先生提供了一篇关于如何执行hibernate布尔转换的文章:http://jaketrent.com/post/hibernate-boolean-conversion/

09-10 08:06
查看更多