页面实体。
@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;
PageRepository
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返回真实的页面实体列表(不为null),但是实体中的所有字段均为null。
为什么?
最佳答案
刚才我也遇到了这个问题,它看起来像spring数据做了某种惰性实例化。
因此,如果您未在交易内部访问此字段,则它们将保留为null
。在调用此请求的方法上添加注释@Transactional
,将解决问题。
关于java - Spring JPA存储库方法在查询后不设置实体的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27485288/