小编fan*_*fan的帖子

Java 8 Streams并尝试使用资源

我认为流API在这里使代码更容易阅读.我发现了一些很烦人的东西.的Stream接口(java.util.stream.Stream)延伸的AutoClosable接口(java.lang.AutoCloseable)

因此,如果要正确关闭流,则必须使用try with resources.

清单1.不太好,溪流没有关闭.

   public void noTryWithResource() {
    Set<Integer> photos = new HashSet<Integer>(Arrays.asList(1, 2, 3));

   @SuppressWarnings("resource") List<ImageView> collect = photos.stream()
            .map(photo -> new ImageView(new Image(String.valueOf(photo)))).collect(Collectors.<ImageView>toList());
}
Run Code Online (Sandbox Code Playgroud)

清单2.2个imbricated尝试:(

   public void tryWithResource() {
    Set<Integer> photos = new HashSet<Integer>(Arrays.asList(1, 2, 3));

    try (Stream<Integer> stream = photos.stream()) {
        try (Stream<ImageView> map = stream
                .map(photo -> new ImageView(new Image(String.valueOf(photo))))) {
            List<ImageView> collect = map.collect(Collectors.<ImageView>toList());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

清单3.当map返回流时,必须关闭stream()map() …

java eclipse java-8 java-stream

21
推荐指数
3
解决办法
2万
查看次数

休眠位置参数从零开始

我正在将一个项目从Hibernate 4.2.6迁移到5.2.0。

我注意到,对于Hibernate 5.2.0,本机查询现在需要从零开始的参数定位。

根据JPA 2.1规范

3.10.13位置参数

本机查询只能使用位置参数绑定和对结果项的位置访问,但已定义命名参数的存储过程查询除外。绑定位置参数的值时,编号从“ 1”开始。假设对于本机查询,参数本身使用SQL语法(即“?”而不是“?1”)。

我对规范的理解是,即使是本机查询,编号也应从1开始。

现在根据Hibernate文档Query.setParameter(int,Object)。该位置从0开始编号。在Hibernate 4.2和5.2的文档中。

我做了一个微测试

首先使用Hibernate 4.2.6

@PersistenceContext 
private EntityManager entityManager;


Query query = entityManager.createNativeQuery("select * from Game g where title = ?");
query.setParameter(1, GAME_TITLES[0]);
List list = query.getResultList();
Run Code Online (Sandbox Code Playgroud)

这适用于休眠4.2.6。

persistence.xml文件如下所示

<persistence-unit name="test" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>jdbc/arquillian</jta-data-source>
    <properties>
        <property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"/>
        <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
    </properties>
</persistence-unit>
Run Code Online (Sandbox Code Playgroud)

与Hibernate 5.2相同

Query query = entityManager.createNativeQuery("select * from Game g where title = ?");
query.setParameter(0, GAME_TITLES[0]);
List list = query.getResultList();
Run Code Online (Sandbox Code Playgroud)

唯一的区别是setParameter中的0索引。

persistence.xml也非常相似 …

java sql parameters hibernate jpa

6
推荐指数
1
解决办法
2754
查看次数

Spring-data-elasticsearch元数据_score

从Spring-Data查询Elasticsearch时,我希望得到_score

如果我们采用以下简单的类:

@Document(indexName = "test", type = "el_test")
public static class ElTest{
    private long id;
    private String myField;
}
Run Code Online (Sandbox Code Playgroud)

使用JUnit测试

@Test
public void testScore() throws Exception {
    elasticsearchTemplate.index(new IndexQueryBuilder()
            .withIndexName("test")
            .withObject(new ElTest("first value"))
            .build());
    elasticsearchTemplate.index(new IndexQueryBuilder()
            .withIndexName("test")
            .withObject(new ElTest("second value"))
            .build());
    elasticsearchTemplate.index(new IndexQueryBuilder()
            .withIndexName("test")
            .withObject(new ElTest("third"))
            .build());

    SearchQuery query = new NativeSearchQueryBuilder()
            .withQuery(QueryBuilders.matchQuery("myField","second value"))
            .build();

    List<ElTest> els = elasticsearchTemplate.queryForList(query, ElTest.class);
    assertEquals(2, els.size());
}
Run Code Online (Sandbox Code Playgroud)

这将在Elasticsearch中创建3个条目.查询将检索具有不同分数的两个值.

如果我们将请求直接放在Elasticsearch中:

POST /test/_search
{
  "query": { 
    "match" : {
      "myField" : {
        "query" : "second …
Run Code Online (Sandbox Code Playgroud)

java spring-data spring-data-elasticsearch

2
推荐指数
1
解决办法
2598
查看次数