我目前正在尝试使用ModelMapper的映射方法执行实体到DTO的映射。在最深的属性映射上,映射结果为null,但它应该是一个对象。
以下是我的映射源实体(省略brevety的Loombok getter和setter):
public class Client implements Serializable
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Long id;
@NotEmpty
public String name;
@NotEmpty
public String surname;
@NotEmpty
@Email
public String email;
@Column(name="creation_date", updatable=false)
@Temporal(TemporalType.DATE)
@DateTimeFormat(pattern="yyyy-MM-dd")
public Date creationDate;
public String photo;
@OneToMany(mappedBy="client", fetch=FetchType.LAZY, cascade=CascadeType.ALL, orphanRemoval=true)
public List<Invoice> invoices;
}
public class Invoice implements Serializable
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
public Long id;
@NotEmpty
public String description;
public String comment;
@Temporal(TemporalType.DATE)
@Column(name = "creation_date", updatable = false)
@DateTimeFormat(pattern = "yyyy-MM-dd")
public Date creationDate;
@ManyToOne(fetch = FetchType.LAZY)
public Client client;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "invoice_id")
public List<InvoiceItem> items;
}
public class InvoiceItem implements Serializable
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Long id;
public Integer amount;
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="product_id")
public Product product;
}
public class Product implements Serializable
{
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
public Long id;
public String name;
public Double prize;
@Temporal(TemporalType.DATE)
@Column(name="creation_date", updatable=false)
@DateTimeFormat(pattern="yyyy-MM-dd")
public Date creationDate;
}
以下是我的目标DTO(省略brevety的Loombok Getter和Setter):
public class ClientDTO implements Serializable
{
@JsonIgnore
public Long id;
public String name;
public String surname;
public String email;
@JsonIgnore
public Date creationDate;
public String photo;
}
public class ClientWithInvoicesDTO extends ClientDTO implements Serializable
{
@JsonManagedReference
public List<InvoiceDTO> invoices;
}
public class InvoiceDTO implements Serializable
{
@JsonIgnore
public Long id;
public String description;
public String comment;
public Date creationDate;
@JsonBackReference
public ClientDTO client;
public List<InvoiceItemDTO> items;
}
public class InvoiceItemDTO implements Serializable
{
@JsonIgnore
public Long id;
public Integer amount;
public ProductDTO productDTO;
}
public class ProductDTO implements Serializable
{
@JsonIgnore
public Long id;
public String name;
public Double prize;
@JsonIgnore
public Date creationDate;
}
在我的Controller类方法上,我这样做映射:
@RequestMapping(value = "/{id}/with-invoices", method = RequestMethod.GET)
public ResponseEntity findOneWithInvoices(@PathVariable Long id)
{
Client wantedClient = this.clientService.findOneWithInvoices(id);
ClientWithInvoicesDTO wantedClientWithInvoicesDto = this.modelMapper.map(wantedClient, ClientWithInvoicesDTO.class);
return new ResponseEntity<>(wantedClientWithInvoicesDto, HttpStatus.OK);
}
My clientService正确返回数据,但JSON响应上的“product”属性为空,不应为:
{
"name": "cupiditate",
"surname": "veritatis",
"email": "george.prohaska@example.com",
"photo": "ec0327a5-3de8-328c-a812-9000d6d5507d",
"invoices": [
{
"description": "Distinctio autem id vel necessitatibus unde omnis rerum. Minus maxime quos doloribus. Voluptatem amet praesentium sit magni quia molestiae. Officia aspernatur numquam ut perspiciatis a.",
"comment": "Odio enim libero tempore molestiae.",
"creationDate": "2013-02-16",
"items": [
{
"amount": 6,
"productDTO": null
},
...
有人能帮我吗?
正如M.Deinum在下面的评论中所说,on InvoiceItemDTO产品属性应命名为“product”,而不是“productDTO”。现在它可以正常工作了
你不应该把@Entity放在你的课之前吗?就像这样:
@Entity
public class MyClass {
...
}
我正在使用模型映射器(http://modelmapper.org/)将具有延迟加载对象列表(通过Hibernate)的实体映射到具有modelmapper.map()的DTO。 输出dto的列表为空值,但实体的列表已填充。当我改为“急切加载”时,一切正常,但我的查询太大,所以这不是一个选项。 有人知道模型映射器如何映射代理的Hibernate实体类吗? 这是我的父实体: 运输署署长: 这是我如何
我在Kotlin-vertx项目中配置了Hibernate,我设法设置了所有内容,但当我运行HQL查询时,它会输出: 提前谢了。
早上好 我正在使用ModelMapper将DTO映射到实体,反之亦然,与此相关,我有一个问题。 1)当我从SonController获取SonDTO时,我需要将长的motherId映射到实体Son,但在那里我有实体mothermother来建立关系,它在内部有id。那么我如何将这个SonDTO motherId映射到实体mothermother中,反之亦然? 类以下:
我与ModelMapper框架有麻烦。请解释为什么我看到以下行为。 我在build.gradle有以下依赖性 和一个类客户: 我还有一个地图绘制工具: 还有一个测试 在fred()中,方法输出是非红色的“Customer{name=fred,age=40}”(“Customer{name=null,age=40}”)。你能解释一下为什么吗?为什么我在第一个方法中看不到输出“George”?
我有一个父类和子类,其各自的DTO如下 当我试图将父映射到父映射到父映射到父映射时,我得到了堆栈溢出错误。 请帮我解决这个问题。
问题内容: 我正在使用Spring MVC框架编写简单的博客Web应用程序。我愿意为我的应用添加图层。 我决定使用ModelMapper框架从对象转换为视图中使用的对象。 我只有一个问题。在我的主页上,我正在显示博客中的帖子列表。在我看来,这只是(实体)对象的列表。我想更改它以将对象列表传递给我的视图。有没有什么办法来映射的对象的单方法调用的对象?我当时在考虑编写将对此进行转换的转换器,但是我不确