标签: spring-data

如何在Spring JPA中保存引用现有实体的新实体?

想象一下以下型号:

雇员:

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "employee_project", joinColumns = @JoinColumn(name = "Emp_Id"), inverseJoinColumns = @JoinColumn(name = "Proj_id"))
private Set<Project> projects = new HashSet<Project>();
Run Code Online (Sandbox Code Playgroud)

项目:

@ManyToMany(mappedBy = "projects")
private Set<Employee> employees = new HashSet<Employee>();
Run Code Online (Sandbox Code Playgroud)

现在,如果我创建一个引用现有项目并尝试保留该员工的新员工,则会收到错误消息:

detached entity passed to persist: Project
Run Code Online (Sandbox Code Playgroud)

我按如下方式创建员工:

public void createNewEmployee(EmployeeDTO empDTO) {

  Employee emp = new Employee();
  // add stuff from DTO, including projects

  repository.saveAndFlush(emp);  // FAILS
}
Run Code Online (Sandbox Code Playgroud)

我更新现有的这样的:

public void updateEmployee(EmployeeDTO empDTO) {

   Employee emp = repository.findOne(empDTO.getId());
   // set stuff from DTO, including projects …
Run Code Online (Sandbox Code Playgroud)

java spring jpa spring-data spring-data-jpa

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

处理QueryDSL中的可选参数

我在SpringData中使用QueryDSL.我有表说,Employee我已经创建了实体类说,EmployeeEntity 我已经编写了以下服务方法

public EmployeeEntity getEmployees(String firstName, String lastName)
{
    QEmployeeEntity employee = QEmployeeEntity.employeeEntity;
    BooleanExpression query = null;
    if(firstName != null)
    {
        query = employee.firstName.eq(firstName);
    }
    if(lastName != null)
    {
        query = query.and(employee.lastName.eq(lastName)); // NPException if firstName is null as query will be NULL
    }
    return empployeeDAO.findAll(query);
}
Run Code Online (Sandbox Code Playgroud)

如上所述我评论了NPException.如何使用Spring数据在QueryDSL中使用QueryDSL作为可选参数?

谢谢 :)

java querydsl spring-data

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

使用Spring Data Mongo 1.5"发现循环"

我有一个完美运行Spring Data MongoDB 1.4.2的项目.我尝试更新到1.5.0并在自动装配(提取)期间出现此错误:

org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver $ CyclicPropertyReferenceException:通过引起发现周期为路径类型"过滤器"字段的"规则""filter.rules"
在org.springframework.data.mongodb.core.index .MongoPersistentEntityIndexResolver $ CycleGuard.protect(MongoPersistentEntityIndexResolver.java:370)〜[spring-data-mongodb-1.5.0.RELEASE.jar:na]
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver $ 2.doWithPersistentProperty(MongoPersistentEntityIndexResolver .java:144)〜[spring-data-mongodb-1.5.0.RELEASE.jar:na]
at org.springframework.data.mongodb.core.index.MongoPersistentEntityIndexResolver $ 2.doWithPersistentProperty(MongoPersistentEntityIndexResolver.java:138)~ [spring -data-mongodb-1.5.0.RELEASE.jar:na]
at org.springframework.data.mapping.model.BasicPersistentEntity.doWithProperties(BasicPersistentEntity.java:294)〜[spring-data-commons-1.8.0.RELEASE.罐子:NA]

我有一个存储库"RulesDAO"只是扩展"MongoRepository".它管理名为"Rule"的实体.该实体具有一些基本字段和"过滤器"字段.此Filter类包含Filter列表(可以为空).

@Document(collection="rules")
public class Rule {

    @Id private String id;

    private String name;

    // other fields

    private Filter filter;

}

public class Filter {

    // for groups
    private String condition;

    private List<Filter> rules = new ArrayList<Filter>();


    // for query
    private String field;

    private String value;

}
Run Code Online (Sandbox Code Playgroud)

("规则"不是一个完美的名称,但它必须以这种方式命名为MVC绑定)

所以Filter.rules属性被解释为一个循环,它不是!(以及我对术语"循环"的理解)

它是发布中的错误还是这个用例有一个新的"标志"?

谢谢


对于背景故事,Filter类可以是叶子或用于构建复杂Criteria的树的节点,它是从矿山的jQuery插件的JSON构建的http://mistic100.github.io/jQuery-QueryBuilder

java spring spring-data spring-data-mongodb

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

spring data mongodb:从自定义转换器中访问默认的POJO转换器

我通过xml设置spring数据mongo自定义转换器,如下所示

<mongo:mapping-converter id="mongoConverter" db-factory-ref="mongoDbFactory">
    <mongo:custom-converters>
        <mongo:converter ref="customWriteConverter" />
        <mongo:converter ref="customReadConverter" />
    </mongo:custom-converters>
</mongo:mapping-converter>

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
    <constructor-arg ref="mongoDbFactory"/>
    <constructor-arg ref="mongoConverter"/>
</bean>

<bean id="customWriteConverter" class="package.WriteConverter" />
<bean id="customReadConverter" class="package.ReadConverter" />
Run Code Online (Sandbox Code Playgroud)

在自定义读/写转换器中,我想重新使用spring-data-mongo的默认pojo转换器将某些属性保存为子文档.

考虑一个简化的例子 -

class A {
    B b;
    String var1;
    int var2;
}

class B {
    String var3;
    String var4;
}
Run Code Online (Sandbox Code Playgroud)

我想使用customWriteConverter和处理A类的转换customReadConverter,但在我的自定义转换器中,我还想将B类的转换委托给spring-data-mongo的默认POJO转换器.

我怎样才能做到这一点?我无法成功将MongoConverter或MongoTemplate自动装入自定义转换器,因为MongoConverter/MongoTemplate bean在尝试创建自定义转换器时正在进行中.是否可以访问默认转换器并在自定义转换器中使用它?

spring spring-data spring-data-mongodb

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

无法使用Spring @Cacheable和@EnableCaching

我想替换旧的:

@Component
public interface MyEntityRepository extends JpaRepository<MyEntity, Integer> {

    @QueryHints({@QueryHint(name = CACHEABLE, value = "true")})
    MyEntity findByName(String name);
}
Run Code Online (Sandbox Code Playgroud)

这样:

@Component
public interface MyEntityRepository extends JpaRepository<MyEntity, Integer> {

    @Cacheable(value = "entities")
    MyEntity findByName(String name);
}
Run Code Online (Sandbox Code Playgroud)

因为我想使用高级缓存功能,如不缓存空值等.

为此,我按照Spring教程https://spring.io/guides/gs/caching/

如果我不注释我的Application.java,缓存根本不起作用.

但是如果我添加@EnableCaching一个CacheManager bean:

package my.application.config;

@EnableWebMvc
@ComponentScan(basePackages = {"my.application"})
@Configuration
@EnableCaching
public class Application extends WebMvcConfigurerAdapter {

    @Bean
    public CacheManager cacheManager() {
        return new ConcurrentMapCacheManager("entities");
    }

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

我在启动时收到以下错误:

java.lang.IllegalStateException:未指定CacheResolver,并且未找到CacheManager类型的bean.注册CacheManager bean或从配置中删除@EnableCaching批注

如果我用CacheResolver bean替换My CacheManager bean,我会得到同样的错误:

@Bean
public CacheResolver cacheResolver() …
Run Code Online (Sandbox Code Playgroud)

java spring caching spring-data

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

Spring 数据存储库将 null 作为 bytea 发送到 PostgreSQL 数据库

从 MySQL 切换到PostgreSQL 后,我发现我的 SQL 查询(spring 数据存储库界面中的 @Query)不再起作用。该问题是由作为bytea发送的值引起的,我收到以下异常:

Caused by: org.postgresql.util.PSQLException: ERROR: operator does not exist: bigint = bytea
Hint: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Run Code Online (Sandbox Code Playgroud)

带有@Query 的存储库:

public interface WineRepository extends PagingAndSortingRepository<Wine, Long> {
    @Query(value = "SELECT * FROM WINE w WHERE (?1 IS NULL OR w.id = ?1)", nativeQuery = true)
    Wine simpleTest(Long id);
}
Run Code Online (Sandbox Code Playgroud)

简单测试:

LOGGER.warn("test1: {}", wineRepository.simpleTest(1L));    //ok
LOGGER.warn("test2: …
Run Code Online (Sandbox Code Playgroud)

java postgresql hibernate spring-data spring-data-jpa

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

查询方法之间的区别是什么...通过,阅读...通过,查询...通过,并获得...在弹簧数据中?

我正在查看spring数据的文档,并没有找到使用方法的理由read...By,get...By而不是find...By(通常这样做).请澄清:

  • 这种方法有什么作用?
  • 或者这种方法的目的是什么?
  • 在什么情况下更好地使用这种方法?
  • 他们之间有什么区别?

你能写一个query..By方法的例子吗?

spring spring-data spring-data-jpa

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

如何将弹簧数据Sort转换为querydsl OrderSpecifier?

这基本上与此相反: 如何使用Spring JPA进行分页QueryDSL查询?

这是一个自定义查询,我不能使用任何findAll()方法.

编辑:

发布了错误的链接.现在纠正了.

querydsl spring-data

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

如何使用Spring Data Repositories处理大量数据?

我有一个大表,我想通过Spring Data Repository访问.

目前,我正在尝试扩展PagingAndSortingRepository接口,但似乎我只能定义返回列表的方法,例如:

public interface MyRepository extends 
        PagingAndSortingRepository<MyEntity, Integer>
{
  @Query(value="SELECT * ...")
  List<MyEntity> myQuery(Pageable p);
}
Run Code Online (Sandbox Code Playgroud)

另一方面,findAll()附带的方法PagingAndSortingRepository返回一个Iterable(我想数据没有加载到内存中).

是否可以定义同时返回Iterable和/或不会立即将所有数据加载到内存中的自定义查询?

有没有办法处理大型桌子?

spring repository spring-data

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

spring-data mongodb自定义实现PropertyReferenceException

我正在尝试根据参考4.4自定义实现实现自定义查询:

http://static.springsource.org/spring-data/data-mongodb/docs/current/reference/html/repositories.html

Spring Data的MongoTemplate和MongoRepository有什么区别?

我这样做是因为我需要使用mongoTemplate进行特殊查询.

我得到的错误是一个PropertyReferenceException.所以spring-data似乎试图自动生成我不想要的查询.我想使用自己的自定义查询.

org.springframework.data.mapping.PropertyReferenceException: No property search found for type com.eerra.core.common.dto.User
Run Code Online (Sandbox Code Playgroud)

这里也描述了这个问题,但解决方案对我来说似乎不起作用:

http://forum.springsource.org/showthread.php?114454-Custom-repository-functionality

如果没有spring-data尝试自动生成查询,如何实现自定义查询接口和实现?

组态

弹簧配置

弹簧data.xml中

<!-- Spring Data MongoDB repository support -->
<mongo:repositories base-package="com.eerra.*.common.service" />
Run Code Online (Sandbox Code Playgroud)

存储库类和接口位于以下包中:

com.eerra.core.common.service.UserRepositoryInterface.java com.eerra.core.common.service.UserRepoistoryCustom.java(interface)com.eerra.core.common.service.UserRepositoryCustomImpl.java(implementation)

UserRepositoryCustom.java

public interface UserRepositoryCustom {
    List<User> searchAllUsers();
}
Run Code Online (Sandbox Code Playgroud)

UserRepositoryCustomImpl.java

public class UserRepositoryCustomImpl implements UserRepositoryCustom {

    @Autowired
    private MongoTemplate mongoTemplate;

    @Override
    public List<User> searchAllUsers() {
        return mongoTemplate.findAll(User.class);
    }
}
Run Code Online (Sandbox Code Playgroud)

UserRepositoryInterface.java

@Repository
public interface UserRepositoryInterface extends MongoRepository<User, String>, UserRepositoryCustom {
    User findByEmail(String email);
    List<User> findByEmailLike(String email);
    List<User> findByEmailOrLastName(String …
Run Code Online (Sandbox Code Playgroud)

spring spring-data spring-data-mongodb

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