错误:无法使用<union-subclass>生成标识列密钥(TABLE_PER_CLASS)</union-subclass>

时间:2014-01-10 14:44:03

标签: mysql spring hibernate hibernate-mapping class-table-inheritance

我正在使用Hibernate来保存所有实体都从基本抽象实体继承的实体。对于所有具体实体,分别有数据库表,其中包含自动增量主键列。但是使用GenerationType作为“AUTO”或“IDENTITY”会出错。我希望表示每个具体实体类的数据库表中的所有记录都应该具有顺序递增的ID值。

com.something.SuperClass:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class SuperClass implements Serializable {
    private static final long serialVersionUID = -695503064509648117L;

    long confirmationCode;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO) // Causes exception!!!
    public long getConfirmationCode() {
        return confirmationCode;
    }

    public void setConfirmationCode(long confirmationCode) {
        this.confirmationCode = confirmationCode;
    }
}

com.something.SubClass:

@Entity
public abstract class Subclass extends SuperClass {
    private static final long serialVersionUID = 8623159397061057722L;

    String name;

    @Column(nullable = false)
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

给我这个例外:

Caused by: org.hibernate.MappingException: Cannot use identity column key
generation with <union-subclass> mapping for: com.something.SuperClass
What's the best and most convenient way for me to generate the ID's? I do not want to change my inheritance strategy.

我知道如果我将GenerationType从“AUTO”更改为“TABLE”可以解决,但是这个解决方案的问题是,生成的键不是精确的顺序。它在键之间留下了很大的差距。

我正在寻找允许所有表使用Mysql AutoIncrement主列生成的自动增量值的解决方案。

提前感谢所有人。

P.S。:我已经通过以下帖子: Cannot use identity column key generation with <union-subclass> ( TABLE_PER_CLASS )

0 个答案:

没有答案