java - 复合键,其中部分键来自父类(super class)

标签 java hibernate polymorphism

我在表单上有一些对象。

abstract class AbstractSomething{
    int myMember;
    // getters and setters
}


class ConcreteClass extends AbstractSomething{
    int someOtherMember;
    String name;
    // getters and setters
}

现在我想将ConcreteClass(在一个数据库表中)保留在我的数据库中,其中唯一键应该是使用hibernate注释的myMember和someOtherMember的组合。 据我所知,复合键通常是使用 @Embedded@EmbedderID 创建的 - 但当其中一个关键部分实际上来自父类(super class)。

最佳答案

我认为你可以用 @IdClass 来做到这一点。像这样的东西:

@MappedSuperclass
abstract class AbstractSomething {
    @Id
    int myMember;
}

@Entity
@IdClass(ConcreteClass.Key.class)
class ConcreteClass extends AbstractSomething {
    public static class Key {
        int myMember;
        int someOtherMember;
        // constructor, equals, hashCode
    }

    @Id
    int someOtherMember;
}

这有点笨拙,但我相信它应该有用。

关于java - 复合键,其中部分键来自父类(super class),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19544493/

相关文章:

Java - 通过构造函数将泛型列表传递给类

java - 我想覆盖子类中的 Private 内部类方法是否有可能或任何其他方式来做到这一点?

java - 如何在谷歌云存储构建器中设置项目 ID?

java - 无法访问枚举初始化程序中的静态字段

java - 将对象从 Activity 传递到 IntentService

mysql - hibernate 和 MySQL : UTC datetime

java - 匹配除一个之外的所有字符

java - Hibernate JUnit 测试持久化 vs. jsf live 持久化

java - Hibernate 和带有 Hibernate 注解的 Spring = "Unknown Entity..."

rust - 盒装特征创建背后的机制如何运作?