小编Oli*_*ohm的帖子

如何检索给定域类的spring数据存储库实例?

给出某些类中所有spring数据存储库的列表Bar:

@Autowired
private List<Repository> repositories;
Run Code Online (Sandbox Code Playgroud)

如何Foo在上面的列表中找到现有域类的存储库?

假设存在以下内容:

@Entity
public class Foo {
  ...
}
Run Code Online (Sandbox Code Playgroud)

public interface FooRepository extends JpaRepository<Foo, String> {}
Run Code Online (Sandbox Code Playgroud)

java spring jpa spring-data spring-data-jpa

18
推荐指数
3
解决办法
1万
查看次数

由于乐观锁定失败,用于拒绝PUT的HTTP状态代码

假设我想实现某种乐观锁定并使用ETag来指示最新的资源状态.这意味着,客户端在进行更新If-Match时将使用标头PUT.

根据HTTP规范,412 Precondition failed如果为If-Match标头提供的ETag 与资源的当前状态不匹配,则服务器必须返回.

然而,409 Conflict似乎更接近我想要在语义上表达的内容,特别是因为它给出了在响应中包含的指南.

409如果未能匹配If-Match标题中提供的ETag,那么返回是否非常错误?

rest http optimistic-locking web

18
推荐指数
1
解决办法
7015
查看次数

在Spring Repository接口中使用sort()和limit()进行查询

我是使用MongoDB的Spring Data的新手,我希望在MongoRepository扩展接口中有一个自动生成的查询方法,需要过滤,排序和限制.

查询如下所示:

// 'created' is the field I need to sort against

find({state:'ACTIVE'}).sort({created:-1}).limit(1)
Run Code Online (Sandbox Code Playgroud)

存储库界面如下所示:

public interface JobRepository extends MongoRepository<Job, String> {
    @Query("{ state: 'ACTIVE', userId: ?0 }")
    List<Job> findActiveByUserId(String userId);

    // The next line is the problem, it wont work since
    // it's not in the format @Query expects
    @Query("find({state:'ACTIVE'}).sort({created:-1}).limit(1)")
    Job findOneActiveOldest();

    ...
}
Run Code Online (Sandbox Code Playgroud)

我知道可以将一个Sort参数添加到查询方法中以便进行排序,但问题是将结果限制为仅一个对象.这可以在不必编写自定义JobRepositoryImpl的情况下完成吗?

谢谢

编辑:

我正在寻找的例子:

@Query("{ state:'ACTIVE', $orderby: {created:-1}, $limit:1 }")
Job findOneActiveOldest();
Run Code Online (Sandbox Code Playgroud)

要么

@Query("{ state:'ACTIVE' }")
@Sort("{ created:-1 }")
@Limit(1)
Job findOneActiveOldest();
Run Code Online (Sandbox Code Playgroud)

但这显然不起作用:(

mongodb-java spring-data

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

没有HATEOAS的Spring数据休息

我真的很喜欢Spring Data Rest为你写的所有样板代码,但我宁愿只是一个'常规?' 没有所有HATEOAS东西的REST服务器.主要原因是我在客户端使用Dojo Toolkit,并且它的所有小部件和存储都被设置为返回的json只是一个直接的项目数组,没有所有链接和类似的东西.有谁知道如何配置这个与java配置,以便我得到所有为我编写的mvc代码,但没有所有的HATEOAS东西?

spring-data-rest spring-hateoas

17
推荐指数
2
解决办法
9004
查看次数

我应该使用Java 8默认方法手动实现Spring Data存储库方法吗?

当使用新的Spring Data Evans版本时,能够使用java 8附带的一些好东西是很好的.其中一个是接口中的默认实现.下面的存储库使用QueryDSL使查询类型安全.

我的问题是,在我写这篇文章之前,我使用了单独的UserRepositoryCustom接口模式,findByLogin然后是另一个类UserRepositoryImpl,在那个类中,我将@PersistenceContext获得当前的EntityManager.

我什么EntityManager时候没有上课?它甚至可能吗?

@Repository
public interface UserRepository extends JpaRepository<User, UUID> {

    final QUser qUser = QUser.user;

    // How do I get the entityManager since this is a interface, i cannot have any variables?
    //@PersistenceContext
    //EntityManager entityManager;

    public default Optional<User> findByLogin(String login) {
        JPAQuery query = new JPAQuery(entityManager);
        User user = query
                .from(qUser)
                .where(
                        qUser.deleter.isNull(),
                        qUser.locked.isFalse(),
                        qUser.login.equalsIgnoreCase(login)
                )
                .singleResult(qUser);

        return Optional.ofNullable(user);
    }
}
Run Code Online (Sandbox Code Playgroud)

java spring spring-data spring-data-jpa

17
推荐指数
1
解决办法
9558
查看次数

如何只返回Spring Data MongoDB中查询的特定字段?

我们如何在Spring Data Mongo中选择特定字段.我尝试以下,但我从投例外FooString.

运用 @Query

@Query(value="{path : ?0}", fields="{path : 0}")
String findPathByPath(String path);
Run Code Online (Sandbox Code Playgroud)

@Query

String findPathByPath(String path);
Run Code Online (Sandbox Code Playgroud)

这是文档模型

@Document(collection = "foo")
public class Foo  {

  String name, path;
  …
}
Run Code Online (Sandbox Code Playgroud)

java spring mongodb spring-data spring-data-mongodb

17
推荐指数
4
解决办法
3万
查看次数

Spring Boot是嵌入式Tomcat还是Jetty Production等级

我们正在考虑将一些遗留的JaveEE应用程序转换为Spring Boot.我们正在让一个供应商执行此操作,但是他们声称使用嵌入式Tomcat或Jetty的Spring启动不是生产就绪,而是建议我们将其打包以便部署到容器(Tomcat/Jetty或JBoss)中.这种失败的目的.索赔准确吗?

spring-boot

17
推荐指数
1
解决办法
8661
查看次数

域驱动设计存储库与Spring Data存储库之间是否存在不匹配?

DDD指定每个聚合的存储库,但是当采用Spring Data JPA时,我们只有在声明每个实体的接口时才能利用这些优势.如何解决阻抗不匹配问题?

我希望尝试封装在聚合存储库中的存储库接口,这是一个好的解决方案还是更好的可用解决方案?

到给定的一个例子:Customer是聚合根和实体等Demographics,Identification,AssetSummary等等,其中每个实体可以从具有自己的资源库接口受益.没有违反DDD的最佳方法是什么?

domain-driven-design ddd-repositories spring-data spring-data-jpa

15
推荐指数
1
解决办法
2343
查看次数

如何强制Spring HATEOAS资源呈现一个空的嵌入式数组?

我有以下控制器方法:

@RequestMapping(produces = MediaType.APPLICATION_JSON_VALUE, value = "session/{id}/exercises")
public ResponseEntity<Resources<Exercise>> exercises(@PathVariable("id") Long id) {

  Optional<Session> opt = sessionRepository.findWithExercises(id);
  Set<Exercise> exercises = Sets.newLinkedHashSet();

  if (opt.isPresent()) {
    exercises.addAll(opt.get().getExercises());
  }

  Link link = entityLinks.linkFor(Session.class)
                         .slash(id)
                         .slash(Constants.Rels.EXERCISES)
                         .withSelfRel();

  return ResponseEntity.ok(new Resources<>(exercises, link));
}
Run Code Online (Sandbox Code Playgroud)

所以基本上我试图揭露一个特定Set<>Exercise实体Session.当exercise实体为空时,我得到一个像这样的JSON表示:

{
    "_links": {
        "self": {
            "href": "http://localhost:8080/api/sessions/2/exercises"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

所以基本上没有嵌入式实体,而以下类似的东西是可取的:

{
    "_links": {
        "self": {
            "href": "http://localhost:8080/api/sessions/2/exercises"
        }
    }, 
    "_embedded": {
        "exercises": [] 
    }    
}
Run Code Online (Sandbox Code Playgroud)

任何想法如何执行这个?

spring spring-hateoas

14
推荐指数
1
解决办法
4898
查看次数

如何在Spring Data JPA中将分页与条件查询相结合?

我使用PagingAndSortingRepository和findAll(Pageable pageable)方法来分页我的数据.我认为没有办法提供任何条件.例如,有时我想选择和分页地址city = NY.有没有办法同时提供条件和分页?

java spring jpa spring-data spring-data-jpa

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