想象一下以下型号:
雇员:
@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) 我在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作为可选参数?
谢谢 :)
我有一个完美运行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
我通过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在尝试创建自定义转换器时正在进行中.是否可以访问默认转换器并在自定义转换器中使用它?
我想替换旧的:
@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) 从 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) 我正在查看spring数据的文档,并没有找到使用方法的理由read...By,get...By而不是find...By(通常这样做).请澄清:
你能写一个query..By方法的例子吗?
我有一个大表,我想通过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和/或不会立即将所有数据加载到内存中的自定义查询?
有没有办法处理大型桌子?
我正在尝试根据参考4.4自定义实现实现自定义查询:
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-data ×10
spring ×7
java ×5
querydsl ×2
caching ×1
hibernate ×1
jpa ×1
postgresql ×1
repository ×1