当前位置: 首页 > 面试题库 >

在单个表中的组合外键和主键上休眠一对一映射

斜成济
2023-03-14
问题内容

我有一个Catagory表,具有复合主键和外键。我的表结构就像

CREATE TABLE CATAGORY (
  CATAGORY_ID int(11) NOT NULL,
  CATAGORY_NAME varchar(50) DEFAULT NULL,
  VERSION int(11) NOT NULL,
  PARENT_ID  int(11) DEFAULT NULL,
  PRIMARY KEY (CATAGORY_ID,VERSION)
);

ALTER TABLE CATAGORY ADD CONSTRAINT FOREIGN KEY (PARENT_ID, VERSION) REFERENCES CATAGORY (CATAGORY_ID, VERSION);

我想要像这样的Catagory类的ORM映射

public class Catagory {
    @EmbeddedId
    private CatagoryPk pk ;
    @Column(name="CATAGORY_NAME")
    private String  catagoryName;

    private Catagory parentId;

    private List<Catagory> childs ;

}
@Embeddable
public class CatagoryPk {
    @Column(name="VERSION")
    private Integer version;
    @Column(name="CATEGORY_ID")
    private Integer catagoryId;
}

现在如何注释

private Catagory parentId;  
private List<Catagory> childs ;

问题答案:
@JoinColumns({
    @JoinColumn(name="VERSION", referencedColumnName="VERSION"),
    @JoinColumn(name="PARENT_ID", referencedColumnName="CATAGORY_ID")
})
@ManyToOne
private Catagory parentId;

@OneToMany(mappedBy="parentId")
private List<Catagory> childs;

@IdClass而不是的版本@EmbeddableId(已通过Eclipselink 2.2.1测试):

public class CatagoryPk implements Serializable {

    private Integer version;
    private Integer catagoryId;

    public CatagoryPk() {
    }

    public CatagoryPk(Integer version, Integer catagoryId) {
        this.version = version;
        this.catagoryId = catagoryId;
    }
}

@Entity
@IdClass(CatagoryPk.class)
public class Catagory {
    @Column(name="VERSION")
    @Id private Integer version;
    @Column(name="CATAGORY_ID")
    @Id private Integer catagoryId;

    @ManyToOne
    @JoinColumns({
        @JoinColumn(name="VERSION", referencedColumnName="VERSION", insertable=false, updatable=false),
        @JoinColumn(name="PARENT_ID", referencedColumnName="CATAGORY_ID")
    })
    private Catagory parentId;
}


 类似资料:
  • 问题内容: 我必须与Hibernate合作,但我不确定如何解决此问题,我有2个具有1..n关系的表,如下所示: 如何使用Hibernate进行管理? 我不知道如何声明将包含主键一部分的外键。 我的数据库架构是从Hibernate模型生成的。 问题答案: 我找到了解决此问题的两种方法。 第一个是一种解决方法,没有第二个那么整洁。 将实体的主键定义为包含,和的复合键,首先将假定为主键的内容定义为唯一约

  • 问题内容: 我有一个表,其中父对象具有可选的多对一关系。问题在于该表已设置为默认将fkey列设置为0。 选择时,使用fetch =“ join”等-fkey的默认值0被用来反复尝试从另一个表中选择ID0。当然这不存在,但是我怎么能告诉Hibernate将0的值与NULL相同- 在获取不存在的关系时不循环20多次以上? 问题答案: 我能够通过创建一个id- long类型来解决此问题,该类型扩展了内置

  • 问题内容: 一个表的外键是否可以成为另一个表的组合主键的一部分?例如,如果我有两个表,一个包含有关不同用户的所有活动项目的信息,另一个包含有关项目正在使用哪种设备的信息: 项目表: (两者都不是唯一的) 设备表: (两者都不是唯一的) 现在可以将设备表中的ProjectId设置为项目表中的外键吗?尝试时,我收到一条错误消息,指出“项目表”中的列与现有的主键或唯一约束不匹配? 问题答案: 不。 创建

  • 问题内容: 我试图弄清楚如何构建JPA实体bean,以使数据适用于我的设备。该数据库是旧的,一成不变的,所以我不能更改架构。设备模型具有复合主键,其中的一列是设备类型的FK。 我尝试了几种不同的方法。首先是设备具有DeviceModel和DeviceType,但是这给了我一个错误,那就是太多的东西在引用dev_type。因此,然后我尝试让DeviceModel引用DeviceType,但遇到了相同

  • 我有两个表:A和B,都有一个复合主键。表B的PK也是表a主键的外键。 当我试图获取映射表B的类的实例时,我得到了以下异常: org.hibernate.TypeMismatchException 这两个类都位于package:com.cairone.ejemple01.entities 完整的日志输出为: 2016-09-21 12:28:24.505错误8568--[main] O.S.Boot

  • 问题内容: 我正在尝试建立一个PostgreSQL表,该表具有两个指向另一个表中相同主键的外键。 运行脚本时出现错误 sqlalchemy.exc.AmbiguousForeignKeysError:无法确定关系Company.stakeholder的父/子表之间的联接条件- 有多个链接表的外键路径。指定“ foreign_keys”参数,提供这些列的列表,这些列应被视为包含对父表的外键引用。 那