- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 Spring-MVC 应用程序,我试图在数据库中搜索 GroupNotes 列表。我的项目中的映射是 GroupCanvas 与 GroupSection 具有一对多映射,而 GroupSection 与 GroupNotes 具有一对多映射。由于这些映射,我收到了 LazyInitializationException。正如 SO 所建议的,我应该将对象转换为 DTO 对象以进行传输。我在网上查了一下,但找不到合适的方法来翻译这些内容。
我刚刚创建了一个新列表来避免该错误,但有一个字段仍然给我一个错误。如果有人告诉我如何修复此错误或将对象转换为 DTO 对象以便可以传输它们,我将不胜感激。
Controller 代码:
@RequestMapping(value = "/findgroupnotes/{days}/{canvasid}")
public @ResponseBody List<GroupNotes> findGroupNotesByDays(@PathVariable("days")int days, @PathVariable("canvasid")int canvasid){
List<GroupNotes> groupNotesList = this.groupNotesService.findGroupNotesByDays(days,canvasid);
List<GroupNotes> toSendList = new ArrayList<>();
for(GroupNotes groupNotes : groupNotesList){
GroupNotes toSendNotes = new GroupNotes();
toSendNotes.setMnotecolor(groupNotes.getMnotecolor());
toSendNotes.setNoteCreationTime(groupNotes.getNoteCreationTime());
toSendNotes.setMnotetag(groupNotes.getMnotetag());
toSendNotes.setMnotetext(groupNotes.getMnotetext());
toSendNotes.setAttachCount(groupNotes.getAttachCount());
toSendNotes.setNoteDate(groupNotes.getNoteDate());
toSendList.add(toSendNotes);
}
return toSendList;
}
GroupNotesDAOImpl:
@Override
public List<GroupNotes> searchNotesByDays(int days, int mcanvasid) {
Session session = this.sessionFactory.getCurrentSession();
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DAY_OF_YEAR, -days);
long daysAgo = cal.getTimeInMillis();
Timestamp nowMinusDaysAsTimestamp = new Timestamp(daysAgo);
GroupCanvas groupCanvas = (GroupCanvas) session.get(GroupCanvas.class,mcanvasid);
Query query = session.createQuery("from GroupSection as n where n.currentcanvas.mcanvasid=:mcanvasid");
query.setParameter("mcanvasid", mcanvasid);
List<GroupSection> sectionList = query.list();
List<GroupNotes> notesList = new ArrayList<GroupNotes>();
for (GroupSection e : sectionList) {
System.out.println("Section name is "+e.getMsectionname());
GroupSection groupSection = (GroupSection) session.get(GroupSection.class,e.getMsectionid());
Query query1 = session.createQuery("from GroupNotes as gn where gn.ownednotes.msectionid=:msectionid and gn.noteCreationTime >:limit");
query1.setParameter("limit", nowMinusDaysAsTimestamp);
query1.setParameter("msectionid",e.getMsectionid());
notesList.addAll(query1.list());
}
// I am getting the data below, but I get JSON errors.
for(GroupNotes groupNotes : notesList){
System.out.println("Group notes found are "+groupNotes.getMnotetext());
}
return notesList;
}
GroupCanvas 模型:
@Entity
@Table(name = "membercanvas")
public class GroupCanvas{
@OneToMany(mappedBy = "currentcanvas",fetch=FetchType.LAZY, cascade = CascadeType.REMOVE)
@JsonIgnore
private Set<GroupSection> ownedsection = new HashSet<>();
@JsonIgnore
public Set<GroupSection> getOwnedsection() {
return this.ownedsection;
}
public void setOwnedsection(Set<GroupSection> ownedsection) {
this.ownedsection = ownedsection;
}
}
GroupSection 模型:
@Entity
@Table(name = "membersection")
public class GroupSection{
@OneToMany(mappedBy = "ownednotes", fetch = FetchType.EAGER,cascade = CascadeType.REMOVE)
@JsonIgnore
private Set<GroupNotes> sectionsnotes = new HashSet<>();
public Set<GroupNotes> getSectionsnotes(){
return this.sectionsnotes;
}
public void setSectionsnotes(Set<GroupNotes> sectionsnotes){
this.sectionsnotes=sectionsnotes;
}
}
GroupNotes 模型:
@Entity
@Table(name="groupnotes")
public class GroupNotes{
@Id
@Column(name="mnoteid")
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "mnote_gen")
@SequenceGenerator(name = "mnote_gen",sequenceName = "mnote_seq")
@org.hibernate.annotations.Index(name = "mnoticesidindex")
private int mnoticesid;
@Column(name = "mnotetext")
private String mnotetext;
@Column(name = "mnoteheadline")
private String mnotetag;
@Column(name = "mnotecolor")
private String mnotecolor;
@Column(name = "mnoteorder")
private double mnoteorder;
@Column(name = "attachmentcount")
private int attachCount;
@Column(name = "notedate")
private String noteDate;
@Column(name = "uploader")
private String uploader;
@Column(name = "activeedit")
private boolean activeEdit;
@Column(name = "notedisabled")
private boolean noteDisabled;
@Column(name = "noteinactive")
private boolean noteInActive;
@Column(name = "notecreatoremail")
private String noteCreatorEmail;
@Column(name = "prefix")
private String prefix;
@Column(name = "timestamp")
private Timestamp noteCreationTime;
@Transient
private boolean notRead;
@Transient
private String tempNote;
@Transient
private String canvasUrl;
@ManyToOne
@JoinColumn(name = "msectionid")
@JsonIgnore
private GroupSection ownednotes;
@JsonIgnore
public GroupSection getOwnednotes(){return this.ownednotes;}
public void setOwnednotes(GroupSection ownednotes){this.ownednotes=ownednotes;}
@JsonIgnore
public int getOwnedSectionId(){
return this.ownednotes.getMsectionid();
}
@OneToMany(mappedBy = "mnotedata",fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
@JsonIgnore
private Set<GroupAttachments> mattachments = new HashSet<>();
public Set<GroupAttachments> getMattachments() {
return this.mattachments;
}
public void setMattachments(Set<GroupAttachments> mattachments) {
this.mattachments = mattachments;
}
@OneToMany(mappedBy = "mhistory",fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
@JsonIgnore
private Set<GroupNoteHistory> groupNoteHistorySet = new HashSet<>();
public Set<GroupNoteHistory> getGroupNoteHistorySet(){
return this.groupNoteHistorySet;
}
public void setGroupNoteHistorySet(Set<GroupNoteHistory> groupNoteHistorySet){
this.groupNoteHistorySet = groupNoteHistorySet;
}
@OneToMany(mappedBy = "unreadNotes",fetch = FetchType.LAZY,cascade = CascadeType.REMOVE)
@JsonIgnore
private Set<UnreadNotes> unreadNotesSet = new HashSet<>();
public Set<UnreadNotes> getUnreadNotesSet(){
return this.unreadNotesSet;
}
public void setUnreadNotesSet(Set<UnreadNotes> unreadNotesSet){
this.unreadNotesSet = unreadNotesSet;
}
//getters and setters ignored
}
错误日志:
org.springframework.http.converter.HttpMessageNotWritableException: Could not write JSON: (was java.lang.NullPointerException) (through reference chain: java.util.ArrayList[0]->com.journaldev.spring.model.GroupNotes["ownedSectionId"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: java.util.ArrayList[0]->com.journaldev.spring.model.GroupNotes["ownedSectionId"])
请让我知道该怎么做,因为我已经被这个错误困扰了一段时间了。
最佳答案
我认为发生的情况是 Jackson 尝试根据 getter 方法序列化层次结构中的所有字段。在某些情况下,以下方法会引发 NullPointerException
:
@JsonIgnore
public int getOwnedSectionId(){
return this.ownednotes.getMsectionid();
}
用下面的方法替换它:
@JsonIgnore
public int getOwnedSectionId(){
if(this.ownednotes != null)
return this.ownednotes.getMsectionid();
return 1;
}
我没有解释为什么 jackson 试图在市场上使用@JsonIgnore序列化它,但你可以尝试我的建议
关于java - Spring-MVC、 hibernate : Creating DTO objects from Domain objects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30889860/
我看到 DTO 类型在域模型中的类型内创建并在类型之间传递。这是好习惯吗? 我一直认为 DTO 主要用于上下文边界(即对象图的边缘)以解耦上下文实现(例如域/ui 边界)。 最佳答案 你的问题有点主观
我们将使用 DTO 向表示层发送数据或从表示层发送数据。我们有这样的层: 外观 应用服务 域名 我们使用 Dozer 来帮助我们将实体转换为 dto。但我现在有两个问题: 从entity到dto我们可
我对术语有疑问。根据 Fowler 的说法,DTO 是“在进程之间传输数据以减少方法调用次数的对象”。 (http://martinfowler.com/eaaCatalog/dataTransfer
我们使用 spring-boot 开发的应用程序遵循微服务架构。为了解释这个问题,让我们考虑 3 个不同的服务 A、B、C。服务 A 和 B 也使用服务 C 的一些 API。 我在项目 C(服务 C)
所以基本上我正在编写一个使用 DTO 的 API,但我在返回 DTO 内的另一个实体时遇到了问题。 这是我的 DTO: public class DirectoryDTO { String per
我尝试从方法响应正文中获取派生类字段。请求体参数是基类的类型。请求带有派生类字段,但我无法将其转换为派生类。 这是我的 Controller 方法和 DTO 类: 方法: @PostMapping(
这更多的是一个理论问题,而不是一个实际问题。 我们有一个分层架构,类似于: UI UI_JavaHandler Backend DTO1 需要比 DTO2 多一点的数据,并且恰好是一个额外的字符串
我在 Wildfly 10.1.0-Final 上使用带有 Java 8 和 Hibernate (5.0.X) 的 Java EE 7,我需要使用投影将 JPQL 查询结果加载到 DTO 中,但我找
有一个建议是transfer objects should not contain object references to other transfer objects .相反,他们应该使用其他传输
我们正在开始一个新项目并正在设计 DTO,这些 DTO 将被注入(inject)到具有行为的相应 POCO 中。然而,我能找到的每个 DTO 示例都只包含值类型,例如: public class Cu
这可能是一个一般的java问题 DTO1 属性1 属性2 属性3 DTO2 属性1 属性2 属性3 属性4 属性5 属性6 属性7 属性8 属性9 属性10 属性11 属性12 我将在屏幕上的 gxt
我在一个项目中遇到了一个问题,并在一个裸测试项目中成功地重现了它。 我有以下 dto: public class AppUserDto { public int Id { get; set;
我正在研究 RESTful API,但在为 API 提供输入的过程中遇到了一些麻烦。 假设我有一个可以像这样获取的“人”资源:api/person/{id}并返回一个这样的对象: public cla
我正在使用 DTO 构建我的第一个应用程序 - 我目前有一个 DTO 用于获取特定对象的数据,另一个不同的 DTO 用于更新(PUTting)数据 - 因为只有少数字段可以从任何客户端更新,我决定为
private void writeData(HSSFSheet sheet) { for (int i = 0; i 并动态获取 DTO 属性值?,我们在Stack Overflo
我正在尝试使用 Jackson 和 Kotlin 将 YAML 文档映射到复杂的 DTO 结构,但似乎在某处遇到了误解。 我正在解析的 YAML 文档是 item_names: - item:
这个问题在这里已经有了答案: How to efficiently create a list of objects inside of a generic method? (2 个答案) 关闭 9
我们将使用 DTO 向表示层发送数据或从表示层发送数据。 我在名为 PostAd 的服务对象上有一个方法,它发布用户输入的广告。 Ad 与另一个名为 AdValues 的对象相关联,该对象包含 Ad
我的应用程序服务中有验证逻辑,用于确定请求的操作是否成功,如果没有,原因。我质疑这是否是代码异味,因为它在应用程序服务中而不是域服务中,它围绕检查域模型是否存在、dto 中的属性是否可以为空等展开。代
我有以下域模型: public class Playlist { public long Id { get; set; } public string Title { get; set
我是一名优秀的程序员,十分优秀!