java - Hibernate:自定义实体名称

标签 java oracle hibernate jpa

假设我有一个名称很长的实体:

@Entity
public class SupercalifragilisticexpialidociousPanda
{
    ...
}

使用 Hibernate 将其持久保存到 Postgres DB 可以完美地工作。然而,Oracle 不允许表/列/索引名称超过 30 个字符。 这应该很容易修复,因为我可以手动指定表名称,如下所示:

@Entity
@Table(name="SuperPanda")
public class SupercalifragilisticexpialidociousPanda
{
    ...
}

现在一切都恢复正常工作......除了我对其他表中的实体的任何引用仍然使用长类名称(“SupercalifragilisticexpialidociousPanda”)而不是短表名称(“SuperPanda”)。

例如,如果实体有一个嵌入的 ElementCollection,如下所示:

@ElementCollection
private Set<String> nicknames;

Hibernate 会尝试创建这样的数据库:create table SupercalifragilisticexpialidociousPanda_nicknames,这自然会导致 ORA-00972:identifier is too long 错误。

对于 @OneToOne 关联也会发生同样的情况,其中查找列将被称为 supercalifragilisticexpialidociousPanda_uuid 之类的名称,这在 Oracle 中也会失败。

现在,一种选择是手动添加 @CollectionTable(name="SuperPanda_nicknames")@Column(name="...") 注释引用该实体的每个字段,但这需要大量工作,而且很容易出错。

有没有办法告诉 Hibernate 一次在需要引用实体的地方使用短名称?

我还尝试设置实体名称,如下所示:

@Entity(name="SuperPanda")
@Table(name="SuperPanda")
public class SupercalifragilisticexpialidociousPanda
{
    ...
}

...但这并不能解决问题。

遇到这种情况通常会做什么?

最佳答案

通常人们自己为每个数据库事物(表、列、索引)命名。当您决定重构某些内容时,让 Hibernate 为您做决定可能会导致将来出现问题。

所有引用都可以以一种或另一种方式配置,以使用您决定使用的名称。

提出具体问题,以防您自己找出解决方法。

关于java - Hibernate:自定义实体名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40028390/

相关文章:

java - Hibernate @Filter 枚举列类型

java - 使用相同的 URL 登录并检索数据

Java跨平台应用: Where to save external files?

java - getString() 导致应用程序崩溃。 Bundle.getArgument() 不为空

java - 在 Debian Linux 上安装 Oracle SQL Developer 时出现问题

java - Spring Hibernate H2 Junit 测试 - 如何在启动时加载模式

java - 如何使用PowerShell脚本在Windows上启动本地neo4j服务器?

sql - SQL Server T-SQL 中的 REGEXP_LIKE 转换

java - Oracle Java API 中的 NO_COPY 指令

java - Hibernate、OneToOne 单外键引用