Hibernate 检索实体的推荐方法';谁的财产名称?

Hibernate 检索实体的推荐方法';谁的财产名称?,hibernate,Hibernate,我可以知道检索实体属性名称的推荐方法吗 例如,检索对象 Product product = criteria.add(Restrictions.eq("productID",productId)) .uniqueResult(); List cats = sess.createCriteria(Cat.class) .add( Restrictions.like("name", "Fritz%") ) .add( Restrictions.between("weigh

我可以知道检索实体属性名称的推荐方法吗

例如,检索对象

    Product product =  criteria.add(Restrictions.eq("productID",productId))
.uniqueResult();

List cats = sess.createCriteria(Cat.class)
    .add( Restrictions.like("name", "Fritz%") )
    .add( Restrictions.between("weight", minWeight, maxWeight) )
    .list();


但我不想硬编码“productID”或“name”或“weight”,建议解决这个问题的方法是什么?

第一种方法:使用常量在一个地方硬编码。不过,这种解决方案很糟糕,因为代码的可读性会降低,而且常量中仍有列名不正确的风险

第二种解决方案:保持原样,对查询进行单元测试。代码将保持可读性,单元测试将确保没有错误的名称

第三种解决方案:使用JPAAPI,并使用JPA2标准API,以及。查询将如下所示:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Order> cq = cb.createQuery(Order.class);
SetJoin<Order, Item> itemNode = cq.from(Order.class).join(Order_.items);
cq.where( cb.equal(itemNode.get(Item_.id), 5 ) ).distinct(true);
CriteriaBuilder cb=entityManager.getCriteriaBuilder();
CriteriaQuery cq=cb.createQuery(Order.class);
SetJoin itemNode=cq.from(Order.class).join(Order.items);
cq.where(cb.equal(itemNode.get(Item.id),5)).distinct(true);
其中,
Order
Item
是自动生成的元模型类,分别为
Order
Item
实体的每一列和关联保存属性。注意,IMHO,JPA2标准API是一个非直观的、难以使用的API,不能使代码非常可读


无论如何,每次都可以使用HQL/JPQL来代替条件查询:它们的可读性要高得多。当必须基于各种可选条件动态生成查询时,或者当您有大量复杂、类似的查询并且可以重用公共部分时,条件查询非常有用。但对于大多数情况,HQL更具可读性。无论如何,您都需要对查询进行单元测试。因此,这些测试将检查属性名称是否正确。

我不理解您的问题。这个查找方法应该做什么?使用其ID获取产品?基本上我不想硬编码“productID”。我刚刚编辑了它,希望它现在更清楚,请重新措辞您的问题。我不明白您想说什么要从产品ID获取产品,请使用
product p=session.get(product.class,theProductId)。不需要硬编码,对不起。我调整了这个例子。