【发布时间】:2015-02-13 14:56:17
【问题描述】:
页面实体。
@Entity
@Table(name = "pages", schema = "admin")
public class Page implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", unique = true)
private Integer id;
@Column(name = "name")
private String name;
@ManyToOne(targetEntity = Partition.class, fetch = FetchType.LAZY)
private Partition partition;
@Column(name = "is_startable")
private Boolean isStartable;
@Column(name = "priority")
private Integer priority;
@Column(name = "prefix_granted_authority")
private String prefixGrantedAuthority;
@OneToMany(mappedBy = "page", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
private List<Permission> permissions;
@Column(name = "link", unique = true)
private String link;
页面存储库
List<Page> findByPermissionsGroupsOrderByPartitionNameAscNameAsc(@Param(value = "group") Group group);
PageServiceImpl
@Override
public Collection<Page> getAccessedPages(Group group) {
try {
List<Page> pages = pageRepository.findByPermissionsGroupsOrderByPartitionNameAscNameAsc(group);
return pages;
} catch (Exception ex) {
logger.error("getPage error", ex);
return null;
}
}
getAccessedPages 返回页面实体的真实列表(非空),但实体中的所有字段均为空。
为什么?
【问题讨论】:
-
您是在事务内部还是外部访问这些实体?
-
如果没有找到结果,Repository 方法将返回一个空列表(不是 null,但没有实体)。你确定你得到的是真实的实体吗?结果列表大小是多少?
-
未使用事务且列表大小不为0,它反映了真实的查询结果大小。
-
如何检查字段是否为空?在调试器中?例如,如果您打印
page.getId(),它仍然为空吗?调试器大多使用反射来显示字段值,有时只有在调用它们的 getter 方法后才会初始化。 -
是的,Eclipse Luna 中的调试器。实际上在控制器中我有相同的结果。从服务返回的页面仍然由空值填充。毕竟,Jackson 将这个列表序列化为 [{},{},{},{}]。