Hibernate 3.3继承@IdClass中的@DiscriminatorColumn

时间:2012-12-14 16:06:26

标签: java sql hibernate jpa persistence

我在id类中有一个带有discriminator列的继承问题。该表将成功创建,但每个条目在descriminator列中都为“0”值。

这是我的基类:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER)
@IdClass(BasePK.class)
@SuppressWarnings("serial")
public abstract class Base implements Serializable {

@Id
protected Test test;

@Id
protected Test2 test2;

@Id
private int type;

....
}

这是我的基础pk类:

@Embeddable
public static class BasePK implements Serializable {

@ManyToOne
protected Test test;

@ManyToOne
protected Test2 test2;

@Column(nullable = false)
protected int type;

...
}

我有几个这样的子类:

@Entity
@DiscriminatorValue("1")
@SuppressWarnings("serial")
public class Child extends Base {

}

因此,如果我坚持一个新的Child类,我希望将“1”作为类型,但我得到“0”。当我从BasePK类中删除类型并直接添加到我的Base类时,它可以工作。但这种类型应该是关键的一部分。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

我做了一些改变,

我跳过了额外的可嵌入类,因为它们是相同的。

我必须在注释和子类的构造函数中设置类型值,否则hibernate会话无法处理具有相同值的不同类(得到NotUniqueObjectException)。

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER)
@IdClass(Base.class)
public abstract class Base implements Serializable {
    @Id @ManyToOne protected Test test;
    @Id @ManyToOne protected Test2 test2;
    @Id private int type;
}

@Entity
@DiscriminatorValue("1")
public class Child1 extends Base {
    public Child1(){
        type=1;
    }
}

@Entity
@DiscriminatorValue("2")
public class Child2 extends Base {
    public Child2(){
        type=2;
    }
}