2015-11-24 54 views
1

我正在使用REST Web服务。我试图从数据库中获取一个实体,但是我的方法返回了很多相同的记录。我正在使用EclipseLink JPA实现。REST Web服务返回JSON中的多个实体

这里是我的实体:

@Entity 
@Table(name = "News") 
public final class News implements Serializable, IEntity { 

/** 
* For deserialization with no exception after modification. 
*/ 
private static final long serialVersionUID = 3773281197317274020L; 

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
@Column(name = "news_id", precision = 0) 
private Long newsId; // Primary key 

@Column(name = "title") 
private String title; 

@Column(name = "short_text") 
private String shortText; 

@Column(name = "full_text") 
private String fullText; 

@Temporal(TemporalType.DATE) 
@Column(name = "creation_date") 
private Date creationDate; 

@Temporal(TemporalType.DATE) 
@Column(name = "modification_date") 
private Date modificationDate; 

@OneToMany(fetch = FetchType.EAGER, mappedBy = "news") 
private List<Comment> commentsList; 

@ManyToMany(fetch = FetchType.EAGER) 
@JoinTable(name = "news_tag", joinColumns = { @JoinColumn(name = "news_id") }, inverseJoinColumns = { @JoinColumn(name = "tag_id") }) 
private Set<Tag> tagSet; 

@ManyToOne(fetch = FetchType.EAGER) 
@JoinTable(name = "news_author", joinColumns = { @JoinColumn(name = "news_id") }, inverseJoinColumns = { @JoinColumn(name = "author_id") }) 
private Author author; 

我控制器的方法:

@RequestMapping(value = { "/singleNews/{newsId}" }, method = RequestMethod.GET) 
public @ResponseBody News showSingleNews(@PathVariable("newsId") Long newsId) throws ServiceException { 
    News news = newsService.getSingleNewsById(newsId); 
    news.setCommentsList(commentService.getListOfCommentsByNewsId(newsId)); 
    return news; 
} 

回答

1

尝试使用提取类型懒惰每个你在你的类

@OneToMany(fetch = FetchType.LAZY) 
1

你的代码有名单是受打字保护的:您只能收到一条新闻。这个消息可能有很多评论,我想这不是问题,并且是一个非常好的想法,他们都热切地接受。

我的第一个想法是,你必须有错误的路线,或有不明确的路线。