Spring 数据 MongoRepositories DtoInstantiatingConverter
Spring Data MongoRepositories DtoInstantiatingConverter
我有
@Document
public class Employee
{
@Id
Long empCode;
String empSurname;
String address;
// getters setters
}
我使用 Mongo 存储库编写了一个查询,例如
public interface EmployeeRepository extends MongoRepository<Employee, Long>
{
List<Employee> findEmployeesByEmpCode(int empCode);
@Query(value="{ 'empCode' : ?0 }", fields="{ 'address' : 1}")
List<String> findAddressByEmpCode(int empCode);
第一个查询有效,但第二个查询失败。仅当我将返回的 List 类型更改为 Employee 时它才有效。
失败时的错误是
java.lang.IllegalArgumentException: [Assertion failed] - this argument is required; it must not be null
at org.springframework.util.Assert.notNull(Assert.java:115)
at org.springframework.util.Assert.notNull(Assert.java:126)
at org.springframework.data.convert.EntityInstantiators.getInstantiatorFor(EntityInstantiators.java:86)
at org.springframework.data.mongodb.repository.query.DtoInstantiatingConverter.<init>(DtoInstantiatingConverter.java:61)
at org.springframework.data.mongodb.repository.query.MongoQueryExecution$ResultProcessingConverter.convert(MongoQueryExecution.java:376)
at org.springframework.data.mongodb.repository.query.MongoQueryExecution$ResultProcessingExecution.execute(MongoQueryExecution.java:345)
at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.execute(AbstractMongoQuery.java:91)
显然,它不知道如何将值从包含的 Employee 对象转换为 String。
我该如何实施?任何例子将不胜感激。
谢谢,
fields
属性用于过滤未设置到域对象 (Employee
) 中的属性。跟MongoDB投影机制关系不大
为了在这里使用投影,请参阅projections in the reference documentation。
您将需要创建一个投影界面:
interface AddressesProjection { String getAddress(); }
并相应地更改存储库方法签名:
List<AddressesProjection> findByEmpCode(int empCode);
Projections declare a contract between the underlying type and the method signatures related to the exposed properties. Hence it is required to name getter methods according to the property name of the underlying type.
这是你能得到的最接近的,afaik。
我有
@Document
public class Employee
{
@Id
Long empCode;
String empSurname;
String address;
// getters setters
}
我使用 Mongo 存储库编写了一个查询,例如
public interface EmployeeRepository extends MongoRepository<Employee, Long>
{
List<Employee> findEmployeesByEmpCode(int empCode);
@Query(value="{ 'empCode' : ?0 }", fields="{ 'address' : 1}")
List<String> findAddressByEmpCode(int empCode);
第一个查询有效,但第二个查询失败。仅当我将返回的 List 类型更改为 Employee 时它才有效。
失败时的错误是
java.lang.IllegalArgumentException: [Assertion failed] - this argument is required; it must not be null
at org.springframework.util.Assert.notNull(Assert.java:115)
at org.springframework.util.Assert.notNull(Assert.java:126)
at org.springframework.data.convert.EntityInstantiators.getInstantiatorFor(EntityInstantiators.java:86)
at org.springframework.data.mongodb.repository.query.DtoInstantiatingConverter.<init>(DtoInstantiatingConverter.java:61)
at org.springframework.data.mongodb.repository.query.MongoQueryExecution$ResultProcessingConverter.convert(MongoQueryExecution.java:376)
at org.springframework.data.mongodb.repository.query.MongoQueryExecution$ResultProcessingExecution.execute(MongoQueryExecution.java:345)
at org.springframework.data.mongodb.repository.query.AbstractMongoQuery.execute(AbstractMongoQuery.java:91)
显然,它不知道如何将值从包含的 Employee 对象转换为 String。 我该如何实施?任何例子将不胜感激。
谢谢,
fields
属性用于过滤未设置到域对象 (Employee
) 中的属性。跟MongoDB投影机制关系不大
为了在这里使用投影,请参阅projections in the reference documentation。
您将需要创建一个投影界面:
interface AddressesProjection { String getAddress(); }
并相应地更改存储库方法签名:
List<AddressesProjection> findByEmpCode(int empCode);
Projections declare a contract between the underlying type and the method signatures related to the exposed properties. Hence it is required to name getter methods according to the property name of the underlying type.
这是你能得到的最接近的,afaik。