【问题标题】:Hibernate search query, restrict by child classes?休眠搜索查询,受子类限制?
【发布时间】:2016-07-08 16:39:25
【问题描述】:

考虑以下设置。

Space.java

class Space {

    Id id;

    ParkingCampus campus;
}

class ParkingCampus {

    Id id;

    String country;

 }

这不是我项目的确切结构,但对于我想要理解的内容来说已经足够接近了。

我如何才能对我的“Space”对象运行查询,该对象仅返回子类“ParkingCampus”将字符串“country”设置为特定值的实例,例如:“UK”。

我在想这样的事情:

 sessionFactory.getCurrentSession()
   .createCriteria(String.class)
   .add(Restrictions.eq("country", "UK"))
    .list();

但我不确定这是否会正确编译。那么 Hibernate 在默认情况下会进行“深度”搜索以尝试将结果映射到我的限制条件,还是我需要做其他事情来指定查询以这种方式工作?

任何帮助将不胜感激!

【问题讨论】:

    标签: java database hibernate relation restrictions


    【解决方案1】:

    使用 Space 作为基本条件,为停车场创建别名,并将别名的子国家/地区限制为 UK。

    但是,请记住,IMO,您的实现似乎有点偏离。应该有一个包含parkingCampusId和spaceId复合键的表,而不是拥有该id的Space。

    Criteria criteria =  sessionFactory.getCurrentSession().createCriteria(Space.class, "space");
    criteria.createAlias("space.parkingCampus", "campus");
    criteria.add(Restrictions.eq("campus.country", "UK");
    

    【讨论】:

    • 您好,感谢您的回复。考虑到表格中的实体,我同意您的观点,即该空间应该有一个校园 ID 字段。但是,如果我错了,请纠正我,Hibernate 的意义不在于它应该帮助为我映射这些关系吗?所以说,在获得空间后,我应该也可以定义相关的校园。不必先搜索空间然后再搜索校园 ID 来获得我想要的结果?
    • 最初,是的,但你会想要使用多对一映射:tutorialspoint.com/hibernate/hibernate_many_to_one_mapping.htm 基本上,你所拥有的适合作为“粗略草图”,但你想实现关系所以例如,Campus 带来了一系列可供您使用的懒惰空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多