我想使用两个不同表的 id 作为第三个表的 id(休眠、java、spring)



我有表OwnerSpecies,这两个实体都具有自动生成的id Integer列。

我有第三个表Cat,我希望它能够基于前两个表的id退休,所以我想做一些类似的事情:

Session session = sessionFactory.getCurrentSession();
Cat cat = (Cat) session.get(Cat.class, owner.getId, species.id);

而不是

Cat cat = (Cat) session.get(Cat.class, id);

实体类上需要哪些注释?我猜它会像这个一样

    @EmbeddedId
    private CatId catId;
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="ID", insertable=false, updateable=false)
    private Owner owner;
    @ManyToOne(fetch=FetchType.EAGER)
    @JoinColumn(name="ID", insertable=false, updateable=false)
    private Species species;
@ManyToOne
public Owner getOwner() {
   return owner;
}
@ManyToOne
public Species getSpecies() {
   return species;
}

查询:

Criteria crit = session.createCriteria(Cat.class);
crit.createAlias("owner", "ownerAlias");
crit.createAlias("species", "speciesAlias");
crit.add(Restrictions.eq("ownerAlias.id", ownerId);
crit.add(Restrictions.eq("speciesAlias.id", speciesId);
return crit.list();

这不是一个确切的答案,但你想要的是一个复合ID,我已经遇到了足够多的困难,在我的用例中,我跳过它们,创建一个合成ID,只在表上添加唯一性约束。

此外,从你发布问题的方式来看,在我看来,每个(主人,物种(元组最多只能有一只猫(例如,主人不能有两只同一物种的猫(。如果这不正确,您将需要一个实际的ID。

最新更新