在Spring Data项目中,如果我正在使用多种类型的存储库,即JPA存储库和Mongo存储库,并且如果我要扩展,CrudRepository那么Spring Data如何知道为该存储库选择哪个存储?它可以使用JPA或Mongo。它是基于在每个持久实体上添加的注释@Document还是@Entity?
我试图从Spring引导指南开始,并手动包含Spring-data的依赖项.
我的IDE是eclipse,我选择使用Gradle来构建项目.
双方build.gradle并pom.xml已被修改,但仍然日食发现不能春季数据的库(例如org.springframework.data.*在编译过程中).
以下是我build.gradle和pom.xml.
有人可以建议我哪里出错吗?谢谢!!
的build.gradle
buildscript {
repositories {
maven { url "http://repo.spring.io/libs-release" }
mavenLocal()
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:1.1.1.RELEASE")
}
}
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'spring-boot'
apply plugin: 'war'
war {
baseName = 'Xiwami'
version = '0.1.0'
}
jar {
baseName = 'Xiwami'
version = '0.1.0'
}
repositories {
mavenLocal()
mavenCentral()
maven { url "http://repo.spring.io/libs-release" }
maven { url …Run Code Online (Sandbox Code Playgroud) 抱歉,这是一个非常笨拙/愚蠢的问题,但是我想知道,除了实现之外,在存储库中定义查询之间是否还有其他区别:
public interface EmployeeRepository<Employee, Integer> {
@Query("select e from Employee e where e.name like :name")
public List<Employee> findByName(@Param("name") String name);
}
Run Code Online (Sandbox Code Playgroud)
并在实体中定义查询:
@Entity
@NamedQuery(name="Employee.findByName", query="select e from Employee e where e.name like :name")
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;
//...
}
Run Code Online (Sandbox Code Playgroud)
像是两者都有优点/缺点?
我正在使用动态数据源路由,如本博客文章中所示:http: //spring.io/blog/2007/01/23/dynamic-datasource-routing/
这很好,但是当我将它与spring-data-rest浏览我生成的存储库结合起来时,我(正确地)得到了一个异常,我的查找键没有被定义(我没有设置默认值).
在与数据库建立任何连接之前,如何以及在何处可以挂钩Spring数据休息请求处理以基于"x"(用户授权,路径前缀或其他)设置查找键?
代码方面我的数据源配置主要与顶部的blogpost匹配,包括一些基本的实体类,生成的存储库和Spring Boot以将所有内容包装在一起.如果需要我可以发布一些代码,但没有什么可看的.
假设我们在Java域对象中有四个字段.
而不是将所有字段映射到MongoDB文档,有没有办法有选择地将三个字段映射到MongoDB?
public class Person {
@Id
private String id;
private String name;
// we don't want to map this field into MongoDB
private String noMongoDB.
// getters and setters
}
Run Code Online (Sandbox Code Playgroud) 我知道spring数据休息会将你的存储库导出为REST服务.但我想知道使用spring数据jpa的优点.
我有以下表格
以及以下关系表:
,其复合PK如下:
UserRole.java
@RooJavaBean
@RooJpaEntity(identifierType = UserRolePK.class, versionField = "", table = "UserRole", schema = "dbo")
@RooDbManaged(automaticallyDelete = true)
@RooToString(excludeFields = { "idApplication", "idRole", "idUserName" })
public class UserRole {
}
Run Code Online (Sandbox Code Playgroud)
UserRole_Roo_DbManaged.aj
@ManyToOne
@JoinColumn(name = "IdApplication", referencedColumnName = "IdApplication", nullable = false, insertable = false, updatable = false)
private Application UserRole.idApplication;
@ManyToOne
@JoinColumn(name = "IdRole", referencedColumnName = "IdRole", nullable = false, insertable = false, updatable = false)
private Role UserRole.idRole;
@ManyToOne
@JoinColumn(name = "IdUserName", referencedColumnName = "IdUserName", nullable = …Run Code Online (Sandbox Code Playgroud) 触发OptimisticLockingFailureException的代码:
@Test
public void shouldIncrementUserTotalLikesByOne() throws IllegalArgumentException, UserNotFoundException {
databuilderService.createAll();
User user = userService.findByEmail("abc@gmail.com");
long numberOfLikeCount = user.getLikeCount();
userService.incrementUserTotalLikesByOne(user.getId());
userService.save(user);
long numberOfUpdatedUpdatedCount = user.getLikeCount();
Assert.assertNotNull(numberOfUpdatedUpdatedCount);
Assert.assertEquals(numberOfUpdatedUpdatedCount, numberOfLikeCount+1);
}
Run Code Online (Sandbox Code Playgroud)
发生以下情况时会发生异常UserService.save():
org.springframework.dao.OptimisticLockingFailureException: Optimistic lock exception on saving entity:
我什么时候需要明确地使用EntityManager方法(我对我的Service方法中的clear(),close(),flush(),detach()特别感兴趣,这些方法还可以使用Spring Data repos?
我最感兴趣的是对该主题的一般见解.让我们说在一个应用程序中我发现了这个:
for ( MyEntity myEntity: entities) {
...some logic here
mySpringDataRepo.save ( myEntity );
}
entityManager.flush ();
entityManager.clear ();
Run Code Online (Sandbox Code Playgroud)
我发现EntityManager的这种使用是合理的,因为内存可以用实体重载.但是,在另一个代码段中:
mySpringDataRepository.save(entity);
entityManager.detach(entity);
Run Code Online (Sandbox Code Playgroud)
是否有必要明确分离实体?Spring Data不会单独处理它吗?
我也发现这篇文章:http: //newscentral.exsees.com/item/de38b01b7a9f794a124e2c72b97d1103-c5533957a4140e3c51e7d295ec840d08
让我更加困惑的是.
至于close()方法,我相信没有必要在EE环境中调用它.我对么?
PS:我的配置非常主流:JpaTransactionManager/LocalContainerEntityManagerFactoryBean
出于调试目的,我需要知道spring-data-elasticsearch正在向ElasticSearch集群发送什么查询.我试图toString在SearchQuery对象上调用方法,但不返回我需要的东西.
我在Java中做的事情(使用spring-data-elasticsearch)是:
private FilterBuilder getFilterBuilder(String id) {
return orFilter(
termFilter("yaddayaddayadda.id", id),
termFilter("blahblahblah.id", id)
);
}
SearchQuery sq = NativeSearchQueryBuilder()
.withQuery(new MatchAllQuery())
.withFilter(fb)
.build();
Run Code Online (Sandbox Code Playgroud)
我希望返回类似ES集群REST API中执行的简单查询返回的内容:
{
"query": {
"filtered": {
"filter": {
"or": [
{
"term": {
"yaddayaddayadda.id": "9"
}
},
{
"term": {
"blahblahblah.id": "9"
}
}
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!
spring-data ×10
java ×6
spring ×5
jpa ×3
mongodb ×3
gradle ×1
jpa-2.0 ×1
named-query ×1
repository ×1
spring-boot ×1
spring-roo ×1
testcase ×1