Spring 数据 MongoDB - 长值在使用存储库查询的响应中变为空
Spring Data MongoDB - Long values are coming null in response using Repository query
我正在使用 V2.4.5
开发 Spring Boot MongoDB
示例。在此示例中,当我进行存储库查询时,未映射长字段值。来自 MongoDB.
的示例文档值
{
"_id" : ObjectId("60a536412306ab5bdd7a6b06"),
"user" : {
"id" : 1,
"firstname" : "vins",
"lastname" : "guru",
"email" : "admin@vinsguru.com"
},
"product" : {
"id" : 1,
"description" : "ipad"
},
"price" : 300
}
OrderController.java
@RestController
@RequestMapping("/order-service")
public class OrderController {
@Autowired
private PurchaseOrderService purchaseOrderService;
@GetMapping("/all")
public List<PurchaseOrder> getAllOrders() {
return this.purchaseOrderService.getPurchaseOrders();
}
@PostMapping("/create")
public void createOrder(@RequestBody PurchaseOrder purchaseOrder) {
this.purchaseOrderService.createPurchaseOrder(purchaseOrder);
}
}
PurchaseOrderServiceImpl.java
@Service
public class PurchaseOrderServiceImpl implements PurchaseOrderService {
@Autowired
private PurchaseOrderRepository purchaseOrderRepository;
@Override
public List<PurchaseOrder> getPurchaseOrders() {
return this.purchaseOrderRepository.findAll();
}
@Override
public void createPurchaseOrder(PurchaseOrder purchaseOrder) {
this.purchaseOrderRepository.save(purchaseOrder);
}
}
PurchaseOrder.java
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@Document(collection = "purchase_order")
public class PurchaseOrder {
@Id
private Long id;
private User user;
private Product product;
private double price;
}
User.java
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class User {
private Long id;
private String firstname;
private String lastname;
private String email;
}
Product.java
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class Product {
private Long id;
private String description;
}
我得到的输出是
{
"_id" : ObjectId("60a536412306ab5bdd7a6b06"),
"user" : {
"id" : null,
"firstname" : "vins",
"lastname" : "guru",
"email" : "admin@vinsguru.com"
},
"product" : {
"id" : null,
"description" : "ipad"
},
"price" : 300
}
PurchaseRepository.java
public interface PurchaseOrderRepository extends MongoRepository<PurchaseOrder, String> {
@Query("{ 'user.id': ?0 }")
List<PurchaseOrder> findByUserId(Long userId);
}
之所以会得到null,Mongodbid的默认字段是_id
。并且spring数据在任何类中将id转换为_id
。当您尝试 运行 时,您可以检查控制台 find using query: { "user._id" : 1} fields: Document{{}}
。它提到 _id
那里也没有映射到数据库,数据库有 id
。 (没有下划线)。要克服这个问题,你可以使用 @Field
.
public class User {
@Field("id")
private Long id;
private String firstname;
private String lastname;
private String email;
}
或者你可以在任何地方使用 _id
(在 类 和集合中)
我正在使用 V2.4.5
开发 Spring Boot MongoDB
示例。在此示例中,当我进行存储库查询时,未映射长字段值。来自 MongoDB.
{
"_id" : ObjectId("60a536412306ab5bdd7a6b06"),
"user" : {
"id" : 1,
"firstname" : "vins",
"lastname" : "guru",
"email" : "admin@vinsguru.com"
},
"product" : {
"id" : 1,
"description" : "ipad"
},
"price" : 300
}
OrderController.java
@RestController
@RequestMapping("/order-service")
public class OrderController {
@Autowired
private PurchaseOrderService purchaseOrderService;
@GetMapping("/all")
public List<PurchaseOrder> getAllOrders() {
return this.purchaseOrderService.getPurchaseOrders();
}
@PostMapping("/create")
public void createOrder(@RequestBody PurchaseOrder purchaseOrder) {
this.purchaseOrderService.createPurchaseOrder(purchaseOrder);
}
}
PurchaseOrderServiceImpl.java
@Service
public class PurchaseOrderServiceImpl implements PurchaseOrderService {
@Autowired
private PurchaseOrderRepository purchaseOrderRepository;
@Override
public List<PurchaseOrder> getPurchaseOrders() {
return this.purchaseOrderRepository.findAll();
}
@Override
public void createPurchaseOrder(PurchaseOrder purchaseOrder) {
this.purchaseOrderRepository.save(purchaseOrder);
}
}
PurchaseOrder.java
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
@Document(collection = "purchase_order")
public class PurchaseOrder {
@Id
private Long id;
private User user;
private Product product;
private double price;
}
User.java
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class User {
private Long id;
private String firstname;
private String lastname;
private String email;
}
Product.java
@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
public class Product {
private Long id;
private String description;
}
我得到的输出是
{
"_id" : ObjectId("60a536412306ab5bdd7a6b06"),
"user" : {
"id" : null,
"firstname" : "vins",
"lastname" : "guru",
"email" : "admin@vinsguru.com"
},
"product" : {
"id" : null,
"description" : "ipad"
},
"price" : 300
}
PurchaseRepository.java
public interface PurchaseOrderRepository extends MongoRepository<PurchaseOrder, String> {
@Query("{ 'user.id': ?0 }")
List<PurchaseOrder> findByUserId(Long userId);
}
之所以会得到null,Mongodbid的默认字段是_id
。并且spring数据在任何类中将id转换为_id
。当您尝试 运行 时,您可以检查控制台 find using query: { "user._id" : 1} fields: Document{{}}
。它提到 _id
那里也没有映射到数据库,数据库有 id
。 (没有下划线)。要克服这个问题,你可以使用 @Field
.
public class User {
@Field("id")
private Long id;
private String firstname;
private String lastname;
private String email;
}
或者你可以在任何地方使用 _id
(在 类 和集合中)