【问题标题】:Hibernate query by example (from Spring 3)通过示例进行 Hibernate 查询(来自 Spring 3)
【发布时间】:2009-09-24 12:30:54
【问题描述】:

我已经创建了我的实体类AdressRoadCountyRoadCounty 中,AdressRoad 中。我想在County 中列出所有Adresses。因此,在我的AdressService 我说:

public List<Adress> AllAdresses(County county) {
  Adress adress = new Adress();
  Road road = new Road();
  road.setCounty(county);
  adress.setRoad(road);

  Example example = Example.create(adress);
  return (List<Adress>) adressDAO.query(Adress.class, example);
}

在我的AdressDAO 我有查询():

public List query(Class<?> c, Example example) {
  return getSession().createCriteria(c).add(example).setMaxResults(100).list();
}

这会在我的数据库服务器上执行以下查询:

select this_.AdressId as AdressId2_0_, 
       this_.Description as Descript3_2_0_, 
       this_.DescriptionShort as Descript4_2_0_, 
       this_.HouseLetter as HouseLetter2_0_, 
       this_.HouseNr as HouseNr2_0_, 
       this_.RoadId as RoadId2_0_ 
from tblAdress this_ 
where (this_.HouseNr=0) 
limit 100

我曾期望它至少包含有关我的实体County 的一些信息,以及与tblRoad 的内部连接。 tblRoad 有一个主键roadId,所以我希望this_.roadIdtblRoad.roadId 连接,并且我希望将tblRoad.countyId 设置为County 的主键,即countyId

为什么当我使用自己的实体类型时,此示例中的查询没有正确构建?如果我只使用整数和字符串,它们可以正常工作,但不能使用实体。如何使这样的联接与我自己的实体一起使用?

【问题讨论】:

    标签: java database hibernate spring


    【解决方案1】:

    来自Hibernate docs

    版本属性、标识符和 关联被忽略

    正如他们所说,就是这样。

    【讨论】:

    • 我好像在什么地方读到过,但我不太相信。没有什么我可以做的吗?指定有关深度或要走的关联路径之类的东西?
    • Query-By-Example 有点像玩具。如果您需要编程查询构造,您应该真正使用完整的 Criteria API(这是 QBE 在幕后使用的,以非常有限的方式)。
    • 啊哈,非常感谢您的提示。我将深入研究 Hibernate 参考文档并了解它。我认为通过示例查询是要走的路,它看起来如此通用和好。 :-)
    • 超级,我接受了你的建议,现在正确的查询似乎是:return adressDAO.getSession().createCriteria(Adress.class).createCriteria("road").add(Restrictions.eq( "县", 县)).setMaxResults(100).list();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    • 1970-01-01
    相关资源
    最近更新 更多