我今天发现了JPA 2.0 Criteria API,并想学习它。只是通过一些例子,尝试动手。我的桌上有水果列:
常规的东西:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("fruitManager");
EntityManager em = emf.createEntityManager();
//get the criteria builder
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<Fruit> c = cb.createQuery(Fruit.class);
select id, name, color where name like 'XY%' and color='orange'
即如何:
* 仅获取一些列,
* 包括通配符搜索,
* 在条件的情况下包括AND,OR。
还有什么地方可以通过几种不同类型的SQL查询获得有关“条件”的更多示例?
首先,您要对实体进行操作,而不要对表进行操作,因此我假设对水果进行以下映射:
@Entity
public class Fruit {
@Id int id;
String name;
String color;
}
当result由不同的列组成时,要查询的类型参数为Object []。class(结果将为Object
[]的列表)。其他可能性是使用元组。您可以建立以下描述的查询。仅出于示例目的而清楚了参数的类型,为谓词和ParameterExpressions创建了中间变量。您也可以将它们内联到查询创建中。
CriteriaQuery<Object[]> myquery = cb.createQuery(Object[].class);
Root<Fruit> root = myquery.from(Fruit.class);
ParameterExpression<String> nameParamExp = cb.parameter(String.class, "name");
ParameterExpression<String> colorParamExp = cb.parameter(String.class, "color");
Predicate namePredicate = cb.like(root.<String>get("name"), colorParamExp);
html" target="_blank">Predicate colorPredicate = cb.equal(root.get("color"), nameParamExp);
myquery.multiselect(root.get("id"), root.get("name"), root.get("color"))
.where(cb.and(namePredicate, colorPredicate));
TypedQuery<Object[]> someFruits = em.createQuery(myquery);
someFruits.setParameter("name", "XY%");
someFruits.setParameter("color", "orange");
someFruits.getResultList();
您还可以通过内联所有内容来构建相同的查询:
myquery.multiselect(root.get("id"), root.get("name"), root.get("color"))
.where(cb.and(
cb.like(root.<String>get("name"), "XY%"),
cb.equal(root.get("color"), "orange")));
或使用元组作为结果类型:
CriteriaQuery<Tuple> myquery = cb.createQuery(Tuple.class);
Root<Fruit> root = myquery.from(Fruit.class);
myquery.select(cb.tuple(root.get("id").alias("id"),
root.get("name").alias("name"),
root.get("color").alias("color")))
.where(cb.and(
cb.like(root.<String>get("name"), "XY%"),
cb.equal(root.get("color"), "orange")));
TypedQuery<Tuple> someFruits = em.createQuery(myquery);
for (Tuple t: someFruits.getResultList()) {
//access your results by alias set in query instead of using array index
Integer id = t.get("id", Integer.class);
String name = t.get("name", String.class);
String color = t.get("color", String.class);
}
如果您要使用规范的元模型,那么您需要与您的水果一起在同一包装中进行以下课程。由您自己编写还是使用某些工具生成(例如,使用org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor),由您决定。第一次亲自编写它是有意义的:
@StaticMetamodel(Fruit.class)
public abstract class Fruit_ {
public static volatile SingularAttribute<Fruit, Integer> id;
public static volatile SingularAttribute<Fruit, String> color;
public static volatile SingularAttribute<Fruit, String> name;
}
然后,您可以使用强类型的参数,并使用以下内容替换前一个元组示例中的查询:
myquery.select(cb.tuple(root.get(Fruit_.id).alias("id"),
root.get(Fruit_.name).alias("name"),
root.get(Fruit_.color).alias("color")))
.where(cb.and(
cb.like(root.get(Fruit_.name), "XY%"),
cb.equal(root.get(Fruit_.color), "orange")));
问题内容: 我如何通过获得所有声明的方法?如何获取所有声明的字段? 有什么区别,和 另外,对于使用MethodHandle API for Java devloper的 教程,我将不胜感激。我强调,我是在使用静态类型语言的普通Java上编程的,并且我不是JVM开发人员,尤其是我对整个字节码废话(invokedynamic)不感兴趣。我想弄清楚如何使用此新API代替Java Core API。 编辑
问题内容: 我是一名新的golang开发人员,我想知道为什么需要在项目的根目录设置环境变量。 如果我同时从事多个项目,则每次都需要重新设置环境变量以指向不同的位置。 在我的设置中,我已设置为。这是我所有golang项目的通用目录。 只是为了澄清:将项目数据放入 如果(据我所知)全部用于安装第三方库,那么为我所有的项目提供一个目录并不安全,因此所有必需的第三方库都安装在同一lib目录中,并且每当我在
本文向大家介绍一些基本的WordPress插件,包括了一些基本的WordPress插件的使用技巧和注意事项,需要的朋友参考一下 我知道您在想什么,但这不只是另一篇WordPress插件博客文章。每隔几周我会被问到我会推荐什么WordPress插件,而我总是总是从头到尾给出一些不连贯的列表。因此,我没有做这件事,我想记下我经常使用的插件是一个好主意,并建议其他插件使用。我还将尝试向我使用的插件添加任
问题1: 类似微信这样的安装在用户个人设备上的软件,调整了后端接口服务后,需要用户更新设备上的软件,如果用户没更新,还是能正常使用,一般这种是采取什么方案处理的?是调整后的接口服务,仍然支持旧版本的软件使用吗? 问题2: 假设我有个web系统,全国各地都有门店在使用,有些门店需要使用频繁更新后的web系统(),有些门店只需要偶尔更新web系统。这些门店使用的web系统都是同一个域名。有什么方案,在
我们公司的一些团队目前正在“升级”一些遗留项目以使用Flyway。一个问题是存在多个具有已可用数据库对象(基线)的安装。 我们目前有一个用例(将来肯定会有更多),我们必须创建一些新的迁移脚本,但它们只能在满足数据库当前状态的特定条件时运行。 例如:运行此脚本,但仅当数据库中的表 X 包含数据 Y 时 我已经看到了Flyway条件数据库迁移,但对我来说,这似乎不是正确的解决方案,因为条件不仅仅是一些
在开始学习Keras之前,我们希望传递一些关于Keras,关于深度学习的基本概念和技术,我们建议新手在使用Keras之前浏览一下本页面提到的内容,这将减少你学习中的困惑 符号计算 Keras的底层库使用Theano或TensorFlow,这两个库也称为Keras的后端。无论是Theano还是TensorFlow,都是一个“符号主义”的库。 因此,这也使得Keras的编程与传统的Python代码有所