首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate Inheritance.JOINED生成的FK名称

Hibernate Inheritance.JOINED生成的FK名称
EN

Stack Overflow用户
提问于 2014-05-16 16:10:05
回答 1查看 275关注 0票数 0

我目前正尝试在Hibernate中使用继承,并遇到了InheritanceType.JOINED。我喜欢将所有数据集中在一个表中并共享ID的想法,而不是在所有子类型表中有重复的列(@MappedSuperClass)。但是Hibernate每次初始化Hibernate单例时都会自动在id列上的子类表(如FK_idx3wiwdm8yp2qkkddi726n8o )上生成索引。我注意到,通过在我的MySQL表中按64键限制,在每次启动时都会以不同的方式生成名称。

处理这件事的正确方法是什么?这可以通过注释来解决吗?我还能做什么呢?

我知道有无数类似的问题,但一直未能找到一个解决我的具体问题。

我不会在开发模式下禁用hbm2ddl.auto。

我正在使用MyISAM。没有真正的外国钥匙。我认为这就是Hibernate生成默认索引的原因。无论如何,这个问题将与InnoDB和真正的Foreign相同,因为名称仍然是随机的。或者,在这种情况下,Hibernate实际上会检查是否存在。我不太明白,为什么它不在MyISAM表上这样做。

正如我以前遇到过类似的问题一样,解决方案也可以是为这个单列索引指定一个名称。但是怎么做呢?

超类: FolderItem

代码语言:javascript
复制
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class FolderItem implements Comparable<FolderItem>
{
    @Id
    @GeneratedValue
    protected int       id;
    protected String    name;
    @OneToOne
    @ForeignKey(name = "fkParent")
    protected Folder    parent;
    ...
}

子类:文件夹

代码语言:javascript
复制
@Entity
public class Folder extends FolderItem
{
    @OneToMany(mappedBy = "parent")
    @OrderBy(value = "sortOrder")
    private List<FolderItem>    children;
    ...
}

我试过什么

  • @Index添加到FolderItem.id --这将像人们所期望的那样在FolderItem表上创建一个索引,但不影响Folder
  • protected int id;复制到Folder并尝试向其添加@索引,从而导致类似于“重复定义ID”的异常
  • @Table(appliesTo = "Folder", indexes = { @Index(name = "fkId", columnNames = { "id" }) })添加到Folder类,它实际上按照预期创建了指定的索引,但仍然创建了自己的FK_9xcia6idnwqdi9xx8ytea40h3,与我的FK_9xcia6idnwqdi9xx8ytea40h3相同,但名称除外
EN

回答 1

Stack Overflow用户

发布于 2015-04-07 09:27:50

尝试文件夹类的@PrimaryKeyJoinColumn(name = "foler_item_id")注释。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23699930

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档