ORA-00942:表或视图不存在 - 使用非大写字母进行休眠

时间:2015-10-06 18:44:01

标签: java oracle hibernate

当我尝试映射实体时出现以下错误:

ORA-00942:表或视图不存在

我发现问题在于hibernate试图以“非大写”(小写)字母查找表的名称,但Oracle使用大写字母表格(尽管表格是用非大写字母创建的)大写字母)。 如果我添加注释 @Table @Column 将名称用大写字母添加,我可以解决问题,但我不想添加这些注释。

我想知道是否有任何不同的方法可以做到。

SQL:

create table foo(
    id              integer not null
);

alter table foo
    add constraint foo_pk
    primary key (id);

的实体:

@Entity
public class Foo {

    @Id
    private Long id;

//getter and setter
}

工作的实体:

@Entity
@Table(name = "FOO")
public class Foo {

    @Id
    private Long id;

    //getter and setter
}

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以定义自定义NamingStrategy,以便将特定的表名和列名从您的实体转换为数据库。以下是一些example如何操作。

因此,您只需要创建NamingStrategy接口的实现或扩展一些现有策略,使用您想要获得的行为修改它的行为,然后通过hibernate XML注册这个新策略配置参数hibernate.ejb.naming_strategy或通过配置类。