检索实体的属性名称的推荐方法?
问题描述:
我可以知道什么是检索实体属性名称检索实体的属性名称的推荐方法?
例如检索对象的推荐方式..
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();
...
但我不希望给硬编码“产品ID”或“名称”或“重量”,推荐的解决方案是什么?
答
第一个解决方案:使用常量在一个地方对它们进行硬编码。这个解决方案虽然很糟糕,因为你的代码会变得不太可读,并且你仍然有可能在你的常量中有不正确的列名。
第二种解决方案:保持原样并单元测试您的查询。代码将保持可读性,并且您的单元测试将确保您没有错误的名称。
第三种解决方案:使用JPA API,并使用JPA2标准API与automatically generated metamodel。随后的查询将是这样的:
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);
凡Order_
和Item_
是自动生成分别持有的Order
和Item
实体的每一列和关联属性的元模型类。请注意,恕我直言,JPA2标准API是一种非直观,难以使用的API,不会使代码非常易读。
通过一切手段,每次你可以使用HQL/JPQL而不是标准查询:他们更可读恕我直言。当查询必须基于各种可选标准动态生成时,或者当您有大量复杂的类似查询并且您可以重用公共部分时,条件查询很有用。但对于大多数情况,HQL更具可读性。无论如何,你需要单元测试你的查询。所以这些测试将检查属性名称是否正确。
我不明白你的问题。这种发现方法应该做什么? – 2012-08-10 07:07:13
使用其ID退回产品?基本上我不想硬编码“productID”。我只是编辑它,希望现在更清楚 – seesee 2012-08-10 07:08:07
请更改您的问题。我不明白你想说什么 – Korgen 2012-08-10 07:09:15