我目前正尝试在Hibernate中使用继承,并遇到了InheritanceType.JOINED。我喜欢将所有数据集中在一个表中并共享ID的想法,而不是在所有子类型表中有重复的列(@MappedSuperClass)。但是Hibernate每次初始化Hibernate单例时都会自动在id列上的子类表(如FK_idx3wiwdm8yp2qkkddi726n8o )上生成索引。我注意到,通过在我的MySQL表中按64键限制,在每次启动时都会以不同的方式生成名称。
处理这件事的正确方法是什么?这可以通过注释来解决吗?我还能做什么呢?
我知道有无数类似的问题,但一直未能找到一个解决我的具体问题。
我不会在开发模式下禁用hbm2ddl.auto。
我正在使用MyISAM。没有真正的外国钥匙。我认为这就是Hibernate生成默认索引的原因。无论如何,这个问题将与InnoDB和真正的Foreign相同,因为名称仍然是随机的。或者,在这种情况下,Hibernate实际上会检查是否存在。我不太明白,为什么它不在MyISAM表上这样做。
正如我以前遇到过类似的问题一样,解决方案也可以是为这个单列索引指定一个名称。但是怎么做呢?
超类: FolderItem
@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;
...
}子类:文件夹
@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相同,但名称除外发布于 2015-04-07 09:27:50
尝试文件夹类的@PrimaryKeyJoinColumn(name = "foler_item_id")注释。
https://stackoverflow.com/questions/23699930
复制相似问题