带有Hibernate和硬编码密钥的Java FK

带有Hibernate和硬编码密钥的Java FK,java,hibernate,jpa,foreign-keys,Java,Hibernate,Jpa,Foreign Keys,我试图使用Hibernate在Java代码中的两个模型之间创建FK关系。复合键的1个值根据表名进行硬编码。如何让Hibernate硬编码此模型的值 FK应验证相应表格(教师或高级教师)中的年龄是否属于正确的组。例如,如果我试图创建一个年龄为16岁的教师,服务应该拒绝,因为16岁不是教师的有效年龄,如META_AGE_GROUP表所示。但是,16岁是学生表的有效年龄 我试图简单地使用如下代码: @Entity @Table(name = "TEACHER") public class Tea

我试图使用Hibernate在Java代码中的两个模型之间创建FK关系。复合键的1个值根据表名进行硬编码。如何让Hibernate硬编码此模型的值

FK应验证相应表格(教师或高级教师)中的年龄是否属于正确的组。例如,如果我试图创建一个年龄为16岁的教师,服务应该拒绝,因为16岁不是教师的有效年龄,如META_AGE_GROUP表所示。但是,16岁是学生表的有效年龄

我试图简单地使用如下代码:

@Entity
@Table(name = "TEACHER")
public class Teacher {

    @Id
    private Long id;

    @Column(name = "NAME")
    private String name;

    @OneToOne(mappedBy = "key.age")
    private MetaAgeGroup age;

@Entity
@Table(name = "META_AGE_GROUP")
public class MetaAgeGroup {

    @EmbeddedId
    private MetaAgeGroupKey key;

    @Column(name = "AGE_GROUP_DESC")
    private String description;


@Embeddable
public class MetaAgeGroupKey implements Serializable {

    private static final long serialVersionUID = -7130496764273819801L;

    @Column(name = "AGE")
    private Short age;

    @Column(name = "AGE_GROUP_NAME")
    private String group;
但我有一个例外:

引用的属性不是一(一|多)个: 的mappedBy中的com.whee.school.jpa.model.MetaAgeGroup.key.age com.whee.school.jpa.model.Teacher.age

在选择教师时,是否有任何方法可以从数据库中获取年龄,并将其映射到
元年龄组
FK,方法是提供与我正在选择的表名相等的
Age\u GROUP\u NAME
,而不将表名放入实际数据记录中?更具体地说,我不想在
Teacher
表中放置存储值'Teacher'的列。我想在FK关系中使用表名本身

这可能吗


更新

如果我更改教师模型,如:

@Entity
@Table(name = "TEACHER")
public class Teacher {

    @Id
    private Long id;

    @Column(name = "NAME")
    private String name;

    @OneToOne
    @JoinColumns(value = {
        @JoinColumn(name = "age", referencedColumnName = "AGE"),
        @JoinColumn(name = "fk", referencedColumnName = "AGE_GROUP_NAME")})
    private MetaAgeGroup age;
那么Hibernate将教师与元年龄组相关联就没有问题了。但是,我的数据集有一列,其中包含表名;就像我试图避免的那样。但这是我能让我的应用程序编译的唯一方法


您是如何映射元年龄组实体的?很抱歉,我忘了。我将其添加到教师模型下的帖子中。这是现有数据库还是您正在创建架构?现有数据库。您是如何映射元年龄组实体的?抱歉,我忘记了。我把它添加到了教师模式下的帖子中。这是一个现有的数据库还是你正在创建模式?现有的数据库。